Правильное использование Сервисов Android с RESTful API - PullRequest
2 голосов
/ 27 июня 2011

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

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

В приложениях без Android я обычно создавал своего рода класс dataproxy в шаблоне синглтона. Я мог бы попросить, чтобы dataproxy обновил свои данные через http-запрос, а затем он отправил бы какое-то общесистемное уведомление, как только данные были изменены, так что все заинтересованные представления могут быть обновлены. Я надеюсь, что это имеет смысл.

Мой вопрос сейчас: как мне сделать это способом Android? Должен ли я связывать и отменять привязку к службе Dataproxy, которую я могу активно запрашивать для получения определенных данных? Должен ли я делать свое непостоянное кэширование в этом сервисе или где-то еще? Нужна ли мне AIDL или я могу просто использовать обычные объекты для перемещения данных между службой и деятельностью? Несмотря на то, что руководство по android для разработчиков довольно хорошо написано и полезно, я не нашел много информации о наилучшей практике предоставления услуг.

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 27 июня 2011

Как мне сделать это способом Android?

Вы предполагаете, что существует единственный "путь Android".

Должен ли я связывать и отменять привязкув службу обработки данных, которую я могу активно запрашивать для извлечения определенных данных?

Вы можете либо связывать, либо отправлять команды через startService().

Должен ли я делать своинепостоянное кэширование в этом сервисе или где-то еще?

Если вы уверены, что хотите, чтобы оно было только в ОЗУ, я бы склонялся к статическим элементам данных.Сделайте службу «делателем», а не хранилищем.

При этом я бы отнесся к этому больше как к шаблону синхронизации, а реальное хранилище - это база данных или каталог с кешем вБАРАН.Пользователи сочтут это менее расстраивающим - по вашему текущему плану, если они включены в ваше приложение, а затем на некоторое время позвоните, им потребуется, чтобы вы снова загрузили все данные.

Нужна ли мне AIDL, или я могу просто использовать обычные объекты для перемещения данных между службой и действием?

Если все они находятся в одном и том же процессе, нормальные объекты в порядке с помощью связывания или использованияIntent дополнения для шаблона команды.


Теперь вернемся к:

Как мне сделать это способом Android?

Вариант № 1: оберните свой магазин в ContentProvider и используйте ContentObserver для изменений.

Вариант № 2: ваша служба отправит широковещательную рассылку в ваш пакет при изменении данных, чтобы на переднем плане можно было найтиоб изменениях через BroadcastReceiver, зарегистрированных через registerReceiver().Другие действия просто берут новый взгляд на данные в onResume() - единственное, что нужно немедленно знать об изменении данных, это то, с чем взаимодействует пользователь, если таковые имеются.

Вариант № 3:Используйте шаблон привязки со службой, и пусть основной вид деятельности зарегистрирует слушателя в службе.Служба вызывает слушателя при обновлении данных.Еще раз, другие действия просто берут новый взгляд на данные в onResume()

Вариант № 4: Создайте свою собственную систему слушателя как часть ваших статических членов данных, очень и очень осторожно, чтобы избежать утечек памяти (например, статическая ссылка на действие или службу, которая уничтожена, что препятствует ее сборке мусора).

Возможно, есть другие варианты, но это должно помочь вам начать работу.

0 голосов
/ 24 августа 2013

Сессия Google IO, упомянутая Эндрю Халлораном: http://www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html

0 голосов
/ 08 апреля 2013

Ознакомьтесь с видео сеанса Google I / O. Я реализовал вызовы REST API легко, но неправильно. Только после просмотра этого видео ввода-вывода Google я понял, в чём дело. Это не так просто, как собрать AsyncTask с вызовом get / put HttpUrlConnection.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...