Архитектура Android-приложения - куда поместить код вызова REST API?
Я хочу лучше понять, как структурировать приложение для Android, где действие срабатывает при вызове API (например).
В настоящее время я реализую его, поместив вызов API в подкласс AsyncTask, передав ему ссылку на активность, чтобы он мог обновите пользовательский интерфейс в onPostExecute. Но я чувствую, что это создает слишком связанный код.
Мне интересно, вместо этого я должен поместить вызов API в service и использовать BroadcastReceiver, чтобы обновить активность.
Что скажете вы, AsyncTask или BroadcastReceiver?
Ответы
Ответ 1
Я обычно следую примеру . У меня есть сильное подозрение, что так работает официальное приложение Twitter и что это шаблон, используемый большинством приложений Google. Это также решает проблему, когда ваше приложение уходит (убивается или уходит в фоновом режиме) до завершения задачи или если телефон переключает конфигурацию во время фоновой задачи.
Ответ 2
BroadcastReceiver и обслуживание здесь накладные расходы. Запрос на веб-сервис не должен длиться долго. Служба подходит в случае загрузки файлов или чего-то подобного.
Путь AsyncTask здесь правильный. Но я предлагаю вам показать диалог прогресса, чтобы пользователь знал, что ваше приложение не зависает, но выполняет некоторую полезную работу.
См. пример здесь.
Ответ 3
AsyncTask отлично. Единственное, о чем вам следует беспокоиться, - это ссылаться на вашу деятельность с использованием метода WeakReference, чтобы избежать всей активности, связанной с утечкой памяти. Это не слишком связанный код imo, если вы используете шаблоны наблюдателей или событий.
Ответ 4
Я бы пошел с услугой только в том случае, если вызов займет много времени, так что пользователь может оставить приложение во время его завершения.
Я бы использовал AsyncTask, если задача достаточно коротка, чтобы она почти не проходила ANR, если она была выполнена в потоке пользовательского интерфейса.
(отказ от ответственности: я считаю себя новичком, и я ожидаю комментариев от более опытных людей)