我正在开发一个需要 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 并且不允许在常规线程中拥有网络代码。
服务应该拥有该连接。如果您需要在应用程序未运行时保持连接,那么您应该将其设为前台服务。如果您不将其设为前台服务,请确保从您的活动中绑定到该服务以使其保持活动状态。
不要忘记该服务也在主(UI)线程上运行,因此您仍然需要一个单独的线程来处理通信。
如果您只有一个 Activity 并且只想处理由于配置更改而导致的重新启动,那么您可以自己处理配置更改,保持非 ui 片段拥有的连接,或使用 onRetainNonConfigurationInstance()/getLastNonConfigurationInstance() 将连接传递给自己)(但是不推荐使用片段)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)