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

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

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

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

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

Ответы [ 4 ]

4 голосов
/ 04 марта 2011

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

2 голосов
/ 04 марта 2011

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

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

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

1 голос
/ 04 марта 2011

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

0 голосов
/ 04 марта 2011

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

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

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

...