Android TCP连接最佳实践

Emi*_*mil 11 android tcp tcpclient

我正在开发一个需要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;
}
Run Code Online (Sandbox Code Playgroud)

我在AsyncTask中连接的原因是因为我使用的是android 4.0并且不允许在常规线程中使用网络代码.

Tob*_*zau 6

服务应该拥有连接.如果您需要在应用程序未运行时保持连接,则应将其作为前台服务.如果您不将其作为前台服务,请确保从您的活动绑定到该服务以使其保持活动状态.

不要忘记该服务也在主(UI)线程上运行,因此您仍然需要一个单独的线程来处理通信.

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

  • 不,但他询问了保持连接的最佳方式,如果您想保持活动和配置更改之间的连接,那么这是一项服务. (4认同)
  • Tobias是对的,你不希望在屏幕方向改变时关闭连接,对吗? (2认同)