Intereting Posts
Можно ли изменить ресурсы в APK-файле Android без перестройки? Android & libgdx – как использовать ресурсы только один раз для настольных и андроидных проектов? Почему блокировка glClear в OpenGLES? Проверить, нажата ли внутри rectF в onTouchEvent Горизонтальный индикатор выполнения не обновляет свой статус `AndEngine` Образцы не запускаются на Eclipse, обновляя до последних SDK и ADT для anddorid Программно введите секретный код, например * # * # 4636 # * # * на Android TimerTask уже запланирован Программно индексировать файлы hprof памяти разбора Android WebView – настройка фокуса фокуса HTML с использованием Javascript «Поток не представляет собой хранилище ключей PKCS12» после сохранения с нового пароля на устройстве Android КоординаторLayout layout_anchor не работает Воспроизведение звука MediaPlayer между действиями, но пауза / возобновление, когда фон теряет фокус и возвращается? Макет TabHost и DataBinding IN XMPP, получающее исключение, не авторизованное (401), при отправке формы

Android Content Provider для локальной базы данных SQLite: почему?

Я довольно новичок в разработке Android, но у меня возникают проблемы, обертывая голову вокруг поставщиков контента и, в частности, какие преимущества (если они есть) для создания одного для одного источника данных SQL-данных с одним и тем же БД. Я вижу, что если я хочу использовать адаптер синхронизации, мне нужен контент-провайдер, но, честно говоря, Sync API настолько неподдельен, что я не думаю, что есть преимущество перед откатом моего собственного процесса удаленной синхронизации с помощью REST.

Я также вижу, что, реализуя Content Provider над моей SQLite DB, я получаю гарантированный Android-управляемый синглтон, но я использую AndroidAnnotations, который может делать управление singleton для меня, и это не похоже на то, что я читал, что это Даже обязательно рекомендуется иметь одноэлементный помощник БД, если я правильно управляю своими открытыми соединениями.

Я что-то упускаю? API-интерфейс Content Provider выглядит неожиданно низкоуровневым и подверженным ошибкам для одного приложения DB. В частности, управление отображением URI «вручную» и введение этого странного слоя абстракции, похоже, не приносит большого значения.

Итак, есть ли значение в Content Providers для локальных БД SQLite? И если да, то есть ли какая-то инфраструктура, которая будет генерировать мои URI-сопоставления для меня или она строго сводит ваши собственные?

Во-первых, Sync API делает гораздо больше, чем просто загрузка данных с вашего сервера. Он контролирует пакетную синхронизацию с синхронизацией других приложений по всей системе, обеспечивает связь перед запуском и оптимизирует время работы от батареи во всей системе (как объясняется при одновременном использовании адаптеров синхронизации и передачи данных с помощью адаптеров адаптеров синхронизации ).

Во-вторых, использование Content Provider позволяет вам очень легко воспользоваться инфраструктурой Loaders (также доступной в библиотеке поддержки) и CursorLoader, которая позволяет вашему пользовательскому интерфейсу автоматически обновляться в качестве изменений данных в Content Provider. Это может значительно уменьшить количество шаблонов, необходимых для всей вашей деятельности.

Если шаблон шаблона поставщика контента сам по себе является проблемой, вы можете, конечно, использовать рамки аннотаций, такие как ProviGen, чтобы автоматически генерировать подавляющее большинство поставщиков контента для вас.

В Android также есть некоторые функции, которые могут выполняться только с помощью Content Provider, включая специальные предложения по поиску и совместное использование приватных файлов приложений в других приложениях (хотя вспомогательный класс FileProvider , расширяющий ContentProvider, – это большая часть того, что вам нужно для что).

Тестирование пользовательского интерфейса можно сделать намного проще, так как вы можете использовать предоставленный MockContentProvider для макетирования определенных наборов данных без изменения кода активности (при условии, что он загружает только данные у Поставщика контента).