11

我正在开发一个需要与 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,并且不允许在常规线程中使用网络代码。

4

2 回答 2

6

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

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

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

于 2012-10-19T13:18:45.063 回答
2

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

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

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

每当您跌倒时打开套接字并将其保留为类字段。onDestroy()调用时关闭它。确保你检查它是否不是null第一个。

那么使用 AsyncTask 有什么更好的方法吗(除了普通的 Thread 类,这在 Android 4.0 中是不允许的)

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

于 2012-10-19T13:37:16.103 回答