【发布时间】:2012-10-10 02:48:36
【问题描述】:
我正在开发一个需要 TCP 连接到 TCP 服务器的 Android 应用程序(用 Node.js 编写)
我的 Android TCP 客户端正在工作,可以来回发送消息。
我的具体问题是:
- 在 Android 中处理与服务器的 TCP 连接的最佳方式是什么?
- 如何维护连接(在 onDestroy() 等上正确关闭连接)?
- 有没有比使用 AsyncTask 更好的方法(除了普通的 Thread 类,这在 Android 4.0 中是不允许的)
我在 AsyncTask 中有这样的套接字连接:
@Override
protected Void doInBackground(Void... params) {
try {
Log.d("TCP_MESSAGE", "Connecting...");
socket = new Socket(MY_LOCAL_IP, 8080);
dataOutput = new DataOutputStream(socket.getOutputStream());
inputstream = new InputStreamReader(socket.getInputStream());
input = new BufferedReader(inputstream);
while (!canceled) {
String message = input.readLine();
handleMessage(message);
}
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
我在 AsyncTask 中有连接的原因是因为我使用的是 android 4.0 并且不允许在常规线程中使用网络代码。
【问题讨论】:
-
你是说4.0不允许使用Thread?那不是真的。但无论如何,请参阅下面的答案。
-
在 4.0 中使用线程是错误的。你不能做的是在 MAIN 线程中有网络代码。
-
好吧。当我使用普通线程时出现异常(并发现了其他指定相同问题的线程)。但我确实认为这有点奇怪,所以我猜你是对的。