База данных звонков в сервисах - PullRequest
2 голосов
/ 26 августа 2010

Я смотрел презентацию Вирджила в Google I / O о приложениях с большим количеством REST.

Google I / O 2010 - клиентские приложения REST для Android

Хотя учебник по блокнотам выполняет вызовы базы данных непосредственно из уровня пользовательского интерфейса, Virgil предлагает выполнять вызовы базы данных в Сервисе.

В настоящее время метод onCreate моей Деятельности использует расширенный ContentProvider для доступа к базе данных SQLite для запроса курсора кприкрепить к списку действий Activity.

Я хочу переместить этот код в службу.Достаточно просто.Мой вопрос заключается в том, как правильно перенести курсор обратно на уровень пользовательского интерфейса?Я видел много вопросов, и всегда, кажется, кто-то подсказывает, что есть более подходящий способ сделать это.Что это за путь?

Если говорить более конкретно, я до сих пор понимаю, что Activity должен зарегистрироваться как некий слушатель.Когда Курсор извлекается в Сервисе, для уровня UI устанавливается уведомление для доступа к нему.Куда Служба толкает его, чтобы активность могла его захватить?

Кроме того, моя рассматриваемая архитектура - иметь расширенную Службу, которая вызывается операциями.Внутри этого Сервиса транзакции с базой данных будут выполняться с использованием расширенного ContentProvider, о любых прослушивающих действиях будут уведомляться, и будут запускаться потоки для попадания на веб-сервисы.Итак, у меня есть 1 расширенный Сервис, 1 расширенный ContentProvider и несколько расширенных потоков для разных веб-сервисов.Это кажется приемлемым?

Ответы [ 2 ]

1 голос
/ 17 сентября 2010

Я просто использую вызов managedQuery внутри своей Деятельности, чтобы получить Курсор.Это довольно легкая операция, и я не думаю, что она задержит пользовательский интерфейс.

Я создал службу, которая затем вызывает веб-службу для поиска новых данных.Если новые данные найдены, они помещаются в мою базу данных и вызывается sendBroadcast.Моя активность имеет зарегистрированный BroadcastReceiver, который слышит широковещательную рассылку и вызывает требуемый () на курсоре.

0 голосов
/ 13 февраля 2013

Рассматривали ли вы внедрение Loaders?

У меня есть приложение, которое использует службы Intent для извлечения данных с сервера и хранения их используя ContentProvider. Затем реализуется фрагмент или действие, которое нуждается в данных LoaderCallbacks<Cursor> (onCreateLoader, onLoadFinished и onLoaderReset).

В onCreateLoader Я создаю экземпляр объекта CursorLoader и возвращаю его, в то время как в onLoadFinished Я проверяю, что данные из Курсора отображаются в моем Fragment/Activity.

Проверьте Официальное руководство по загрузке .

...