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

Архитектура Android-приложения - куда поместить код вызова REST API?

Я хочу лучше понять, как структурировать приложение для Android, где действие срабатывает при вызове API (например).

В настоящее время я реализую его, поместив вызов API в подкласс AsyncTask, передав ему ссылку на активность, чтобы он мог обновите пользовательский интерфейс в onPostExecute. Но я чувствую, что это создает слишком связанный код.

Мне интересно, вместо этого я должен поместить вызов API в service и использовать BroadcastReceiver, чтобы обновить активность.

Что скажете вы, AsyncTask или BroadcastReceiver?

4b9b3361

Ответ 1

Я обычно следую примеру . У меня есть сильное подозрение, что так работает официальное приложение Twitter и что это шаблон, используемый большинством приложений Google. Это также решает проблему, когда ваше приложение уходит (убивается или уходит в фоновом режиме) до завершения задачи или если телефон переключает конфигурацию во время фоновой задачи.

Ответ 2

BroadcastReceiver и обслуживание здесь накладные расходы. Запрос на веб-сервис не должен длиться долго. Служба подходит в случае загрузки файлов или чего-то подобного.

Путь AsyncTask здесь правильный. Но я предлагаю вам показать диалог прогресса, чтобы пользователь знал, что ваше приложение не зависает, но выполняет некоторую полезную работу.

См. пример здесь.

Ответ 3

AsyncTask отлично. Единственное, о чем вам следует беспокоиться, - это ссылаться на вашу деятельность с использованием метода WeakReference, чтобы избежать всей активности, связанной с утечкой памяти. Это не слишком связанный код imo, если вы используете шаблоны наблюдателей или событий.

Ответ 4

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

Я бы использовал AsyncTask, если задача достаточно коротка, чтобы она почти не проходила ANR, если она была выполнена в потоке пользовательского интерфейса.

(отказ от ответственности: я считаю себя новичком, и я ожидаю комментариев от более опытных людей)