Подтвердить что ты не робот

Сделать вызов API REST из IntentService или AsyncTask?

Представьте типичный сценарий, когда открывается действие, необходимо вызвать REST HTTP API для получения некоторого контента и после получения обновлений пользовательского интерфейса. Очевидно, что вызов API должен выполняться в отдельном потоке, но должен ли он выполняться с использованием AsyncTask, IntentService или другого подхода и почему?

4b9b3361

Ответ 1

Я бы рекомендовал сочетание IntentService и ResultReceiver, как описано в этом сообщении.

Также посмотрите Google iosched, который реализует эту модель. В версии 2010 года показано, как сохранить ResultReceiver в соответствии с изменениями конфигурации (например, вращением экрана) с помощью onRetainNonConfigurationInstance, getLastNonConfigurationInstance и статического класса.

Я успешно реализовал эту модель в приложении. Сообщите мне, есть ли у вас проблемы с предоставленными ссылками.

Изменить: я забыл вопрос "Почему";)

AsyncTask тесно связан с активностью и не будет обрабатывать изменения конфигурации конфигурации. Это нормально для коротких задач в течение жизненного цикла (между onResume и onPause). Я использую HttpClient для моих вызовов REST API с таймаутом соединения и тайм-аутом сокета, установленным в 20 секунд (из-за плохой мобильной сети...). Это означает, что вызов API может длиться до 40 секунд. Вы определенно хотите обрабатывать такую ​​длинную задачу в службе, а не AsyncTask.