Оптимальная практика подключения TCP к TCP

Я работаю над приложением Android, которому требуется TCP-соединение с TCP-сервером (написано в Node.js)

Мой Android-клиент TCP работает, он может отправлять сообщения туда и обратно.

Мои вопросы:

  1. Каков наилучший способ обработки TCP-соединения с сервером на Android?
  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 и не имею права иметь сетевой код в регулярном потоке.

Solutions Collecting From Web of "Оптимальная практика подключения TCP к TCP"

Служба должна иметь соединение. Если вам нужно поддерживать соединение, пока приложение не работает, вы должны сделать его передним планом. Если вы не делаете его передним планом, обязательно привязывайтесь к сервису из своих действий, чтобы поддерживать его.

Не забывайте, что служба также работает в основном потоке (UI), поэтому для обработки связи вам по-прежнему нужен отдельный поток.

Если у вас есть только одно действие и вы просто хотите обрабатывать перезагрузки из-за изменений конфигурации, вы можете самостоятельно отредактировать изменения конфигурации, сохранить соединение, принадлежащее фрагменту не-ui, или передать соединение себе, используя onRetainNonConfigurationInstance () / getLastNonConfigurationInstance ( ) (Однако это устарело в пользу использования фрагментов).

Каков наилучший способ обработки TCP-соединения с сервером на Android?

Это сильно зависит от сложности вашего приложения и того, что вы хотите с ним делать. Специфических для Android сетей нет.

Как поддерживать соединение (правильно закрыть соединение на onDestroy () и т. Д.)?

Откройте сокет, когда вы упадете, и сохраните его как поле класса. Закройте его, когда onDestroy() . Убедитесь, что вы проверяете, не первый ли он.

Есть ли какой-либо более простой способ использования AsyncTask (за исключением обычного класса Thread, который не разрешен в Android 4.0)

Вы можете использовать обычные потоки Java в Android 4.0 (API14). Возможно, у вас возникла путаница: что запрещено в Android, есть сетевой код в основном потоке ( UIThread ).