Сервис против AsyncTask для обработки изменений конфигурации и TCP-соединения

Вот ситуация: мое приложение имеет одно действие, обрабатывает длительное TCP-соединение и динамически обновляет пользовательский интерфейс с большим количеством вещей (HashTables объектов, кнопок, ArrayLists, адаптеров...). На данный момент я обрабатываю соединение с помощью AsyncTask и ищу способ сохранить:

  • связь
  • все переменные, такие как динамически создаваемые представления

когда экран поворачивается или пользователь получает вызов, я нашел это: http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html, что мне кажется довольно крутым. Но я также везде читал, что вместо этого я должен использовать службу, потому что это лучше для длительных TCP-соединений. Почему AsyncTask:

  • похоже, я могу сохранить TCP-соединение с помощью фрагмента
  • Мне все равно придется сделать что-то подобное, чтобы сохранить объекты, кнопки и т. Д. От вращения/вызовов
  • У меня есть только одно действие, которое требует подключения (разве сервисы не указаны более чем для одного?)

Почему сервис:

  • нет необходимости использовать фрагменты для сохранения TCP-соединения (правильно ли это? какой сервис, обычный, IntentService, поскольку у меня есть только один клиент или ограниченный, я должен использовать для этого?)
  • лучше для длительных соединений

Когда я говорю «сервис», я предполагаю, что мне все равно придется запускать AsyncTask внутри сервиса, поэтому он не обрабатывает соединение в основном действии. Что я должен делать?


person user2502368    schedule 31.10.2014    source источник


Ответы (1)


Как правило, используйте AsyncTask, когда жизненный цикл фонового потока содержится в жизненном цикле одного действия. В противном случае используйте Service.

person Kevin Krumwiede    schedule 31.10.2014