Шаблон проектирования Google IO Rest, законченный ContentProvider и зависший на получении данных из сети

После просмотра очень известного видео на эту тему я решил использовать шаблон проектирования B. Использование поставщика контента с помощью servicehelper.

шаблон дизайна Google в состоянии покоя

В основном у меня есть следующие файлы:

  • МойПровайдер
  • Моя база данных
  • Мойконтракт

Теперь в действии я могу получить ContentResolver и запросить провайдера. Все работает отлично до сих пор.

Теперь мне нужно синхронизировать мой контент-провайдер для получения данных из моего REST API. Таким образом, мне нужно реализовать вспомогательную службу службы и метод Rest. Изучение приложения Google IO мне очень помогло, я новичок в Android, поэтому пока сложно разобраться.

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

Чего я не понимаю, так это того, как я могу реализовать servicehelper + сервисную часть для получения данных из сети.

  • Где я могу вызвать помощника по обслуживанию?
  • Что именно нужно сделать сервису и хелперу?
  • Есть ли хорошие примеры именно этого шаблона проектирования?

Я прочитал несколько тем в стеке об этом, и все они предлагают разные методы. Я нашел пример, в котором объявляется поставщик остальных услуг, а затем myProvider должен расширить этот поставщик. Мне не нравятся эти решения, и я хочу следовать этому шаблону структурированного проектирования.


person Sam    schedule 02.02.2012    source источник
comment
У вас есть ссылка на видео Google IO, на которое вы ссылаетесь?   -  person John Ericksen    schedule 06.02.2012
comment
Я думаю, что вы можете найти все свои ответы в этом проекте: github.com/necronet/Eli-G это было подробно описано в этом сообщении SO .   -  person Zakaria    schedule 06.02.2012
comment
@Zakaria, мой предыдущий ответ был неверным. Я перепутал этот проект с другим кодом, который у меня был здесь. Я уже посмотрел код Эли-га, но мне трудно понять его логику. Я готов одобрить авансера, который полностью объясняет логику eli-g. Спасибо за ответы   -  person Sam    schedule 06.02.2012
comment
@Samvdb: Вы смотрели сообщение SO, где Eli-G объясняет эту логику?   -  person Zakaria    schedule 06.02.2012
comment
@ Закария, да, я сделал, но это не ясно. Насколько я понимаю, он следовал образцу А из видео Google. Это было бы приемлемо для меня, чтобы лучше понять, как все работает. Так что я не реализую этот метод вместо варианта B. Однако я не уверен, что, черт возьми, он делает. В homeActivity он запускает LoaderService и TwitterService. Почему 2 услуги? Кажется, что LoaderService - это все, что мне нужно для работы REST. Не могли бы вы уточнить, может быть, дальше? Спасибо   -  person Sam    schedule 06.02.2012
comment
@ Сэм, привет, мне просто интересно, как у тебя все получилось. Удалось ли вам реализовать паттерн B именно так, как было предложено? Я столкнулся с той же проблемой прямо сейчас, и, похоже, до сих пор нет доступных примеров - единственные доступные для варианта A (хотя для целей моего приложения шаблон B звучит более подходящим).   -  person vaiomike    schedule 15.09.2012
comment
@vaiomike, все получилось отлично, я потратил много времени, пытаясь освоиться, но как только ты это понял. Вы будете использовать его для всех ваших проектов! К сожалению, я не могу привести вам пример, так как проект, над которым я работал, имеет закрытый исходный код (он больше не принадлежит мне). Удачи в реализации, надеюсь у вас все получится! Это стоит того. На заметку: я много изучал приложение Google IO 2011, чтобы посмотреть на его реализацию, и пошел дальше. Они не использовали его полностью, как в схеме выше.   -  person Sam    schedule 15.09.2012
comment
@Sam: очень жаль, что это закрытый исходный код - я полагаю, нет возможности поделиться некоторыми ключевыми компонентами? в любом случае - насколько точно вы совпали с шаблоном B сверху? совершенно точно или какие-то заметные вариации? (по какой-то причине все примеры/сообщения в Интернете, похоже, обрабатывают только шаблон B). Спасибо!   -  person vaiomike    schedule 16.09.2012
comment
Источник @vaiomike стал доступен: github.com/samvdb/TracknTrace   -  person Sam    schedule 07.08.2013


Ответы (1)


В моем понимании схема такая:

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

На ваши вопросы (я изменил порядок):

Где я могу вызвать помощника по обслуживанию?
Я выбираю шаблон A из разговора о бдении. В этом случае вызов зависит от вашего приложения. Вы можете инициировать обновление при запуске приложения, при создании действия или когда пользователь выбирает кнопку обновления. Я бы выбрал при создании активности.

Вы выбрали шаблон B. В этом случае ясно, что поставщик контента должен инициировать обновление. Когда? Для получения новых данных: во время создания или после первого доступа на чтение. Я бы использовал время создания. Для создания, обновления и удаления после соответствующего действия в вашем контент-провайдере.

Есть ли хорошие примеры именно этого шаблона проектирования?
Из моего поста на https://stackoverflow.com/a/8693919/734687: единственная известная мне эталонная реализация с открытым исходным кодом доступна в разделе http://datadroid.foxykeep.com. Это библиотека, которую вы можете использовать в своем приложении. Архитектура описана в разделе /presentation — обязательно прочтите ее.

Что именно должен делать помощник службы?
Если вы посмотрите на slides на слайде 19 это синглтон, который инкапсулирует вызов службы и обрабатывает асинхронные вызовы с помощью идентификаторов запросов.

Что именно должна делать служба?
Служба (слайд 17 в презентации) просто гарантирует, что действие выполняется в фоновом режиме.

person ChrLipp    schedule 08.02.2012
comment
Datadroid утверждает, что является реализацией варианта A, а не варианта B. Это ошибка? - person Estel; 19.09.2012