我正在处理一个需要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() )(但是不赞成使用片段).