Android TCP连接最佳实践

我正在开发一个需要TCP连接到TCP服务器的Android应用程序(以Node.js编写)

我的Android TCP客户端正在工作,可以来回发送消息。

我的特定问题是:

  1. 在Android中处理与服务器的TCP连接的最佳方法是什么?
  2. 如何维护连接(在onDestroy()等上正确关闭连接)?
  3. 有什么方法然后使用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)线程上运行,因此您仍然需要一个单独的线程来处理通信。

    如果您只有一个活动并且只想处理由于配置更改而导致的重新启动,那么您可以自己处理配置更改,保持连接由非ui片段拥有,或者使用onRetainNonConfigurationInstance()/ getLastNonConfigurationInstance将连接传递给您自己( )(但不赞成使用片段)。

    在Android中处理与服务器的TCP连接的最佳方法是什么?

    这在很大程度上取决于您的应用程序的复杂性,以及您想要用它做什么。 Android网络没有具体细节。

    如何维护连接(在onDestroy()等上正确关闭连接)?

    每当你跌倒时打开sockets并将其保持为类字段。 调用onDestroy()时关闭它。 确保先检查它是否为null

    有什么方法然后使用AsyncTask(除了普通的Thread类,Android 4.0中不允许)

    您可以在Android 4.0(API14)中使用普通的Java线程。 您可能会感到困惑:Android中不允许的是主线程中的网络代码( UIThread )。