我正在处理一个需要TCP连接到TCP服务器的
Android应用程序(写在Node.js中)
我的Android TCP客户端正在工作可以来回发送消息.
我的奇怪问题是:
>在Android中处理与服务器的TCP连接的最佳方式是什么?
>如何维护连接(onDestroy()等)正确关闭连接)?
>有没有更好的方式然后使用AsyncTask(除了普通的线程类,这是不允许在Android 4.0)
我在AsyncTask中的socket连接如下所示:
@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)线程上运行,因此您仍然需要一个单独的线程来处理通信.
如果您只有一个活动,并且只是想要由于配置更改来处理重新启动,那么您可以自己处理配置更改,保持非ui片段所拥有的连接,或使用onRetainNonConfigurationInstance()/ getLastNonConfigurationInstance() )(但是不赞成使用片段).