Android的TCP连接的最佳实践(Android TCP connection best pra

2019-09-24 08:05发布

我工作的一个Android应用程序,需要一个TCP连接到TCP服务器(写在Node.js的)

我的Android TCP客户端工作的可以发送邮件来回。

我spesific的问题是:

  1. 什么是处理一个TCP连接到Android中的服务器的最佳方式?
  2. 如何保持连接(正确关闭连接上的onDestroy()等)?
  3. 是否有那么使用的AsyncTask(除正常的Thread类,这是不是在Android 4.0的允许)的任何bether方式

我有一个这样的的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,并且不允许有网络代码在常规线程。

Answer 1:

A服务应该拥有的连接。 如果您需要保留,而你的应用程序没有运行的连接,那么你应该让前台服务。 如果你不让它前景的服务,确保绑定到您的活动服务,以保持它活着。

不要忘了,服务也运行在主(UI)线程,所以你还需要一个单独的线程来处理通信。

如果你只有一个活动,只是想处理由于重启到配置更改,那么你可以处理配置改变自己,保持一个非UI片段拥有的连接,或通过使用onRetainNonConfigurationInstance()/ getLastNonConfigurationInstance(自己的连接)(然而,其在赞成使用片段的建议使用)。



Answer 2:

什么是处理一个TCP连接到Android中的服务器的最佳方式?

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

如何保持连接(正确关闭连接上的onDestroy()等)?

打开时,你倒在了插座,并将其作为一个类的字段。 关闭它时onDestroy()被调用。 请务必检查,如果它不是null第一。

是否有那么使用的AsyncTask(除正常的Thread类,这是不是在Android 4.0的允许)的任何bether方式

您可以在Android 4.0的(API14)使用普通Java线程。 你可能有一个困惑:究竟是不是在Android的允许是有在主线程(UIThread)网络代码。



文章来源: Android TCP connection best practice