подключение к веб-сервису с Android - AsyncTask или Service?

Я пишу приложение для Android, которое будет подключаться к веб-службе REST/JSON. Пользователи будут получать информацию, загружать комментарии, загружать и загружать изображения и т. д.

Я знаю, что не должен хранить всю эту сетевую связь в потоке Activity/UI, так как это вызовет ошибки ANR. Что меня смущает, так это то, должен ли я использовать AsyncTask или службу с «ручной» поточностью для выполнения этого;

С сервисом у меня был бы просто общедоступный метод для каждого метода в API веб-сервиса. Затем я бы реализовал потоки в каждом из этих методов.

Если бы я использовал AsyncTask, я бы создал вспомогательный класс, определяющий AsyncTasks для каждого метода в API веб-сервиса.

Какой метод предпочтительнее? Взаимодействие с веб-службой будет происходить только тогда, когда пользователь находится в действии. Как только они переключаются на другое приложение или выходят из программы, нет необходимости в общении с веб-сервисом.


person football    schedule 07.03.2011    source источник


Ответы (3)


Я рекомендую вам выбрать решение AsyncTask. Это простой и понятный способ запуска запросов или любых других фоновых задач UI-потока.

Это также легко реализовать, например. onProgressUpdate, если вам нужно показать какой-либо индикатор выполнения во время выполнения ваших запросов.

person Eric Nordvik    schedule 07.03.2011
comment
спасибо за рекомендацию. Однако после просмотра этого видео Google IO (google .com/events/io/2010/sessions/), я решил использовать сервисный подход. Я по-прежнему могу использовать AsyncTasks для случаев, когда пользователю требуется немедленная обратная связь от службы (например, публикация комментария). Для простых фоновых задач кажется, что AsyncTask — это то, что нужно. - person football; 07.03.2011

Я рекомендую IntentService, он не намного сложнее в реализации и определенно более надежен, потому что он не так тесно привязан к ActivityLifecycle (в частности, к onConfigurationChange())

person rds    schedule 04.08.2011

Эта библиотека предоставляет асинхронную оболочку для Apache httpclient, доступную в Android.

http://loopj.com/android-async-http/

person krishnakumarp    schedule 11.05.2012