Подтвердить что ты не робот

Android. Поставщик контента или база данных?

Я немного смущен в вопросе, если лучше использовать ContentProvider или Database. Или не имеет значения, если я не хочу делиться данными с другими приложениями.

Если я правильно понял, поставщики контента на базе SQLite DB, а также возможно, что их содержимое доступно только для моего приложения.

Можете ли вы дать некоторые объяснения?

Большое спасибо,

Мур

4b9b3361

Ответ 1

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

Однако для внутреннего использования внутри приложения я не поклонник. Преимущества IMHO перевешиваются издержками (например, уменьшенная гибкость, дополнительные накладные расходы).

Если вы реализуете поставщика контента, имейте в виду, что они доступны по другим приложениям по умолчанию. Вам нужно включить android:exported="false" в элемент <provider>, чтобы сделать их закрытыми для вашего приложения.

Ответ 2

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

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

Ответ 3

Причины использования поставщика контента здесь.

Вкратце:

  • Легко изменить исходный источник данных (вы можете изменить свой db из Sqlite в Mongo или в файл JSON без изменений в приложении)
  • Использование функций некоторых классов Android (SyncAdapter, Loaders, CursorAdapter) - для этих классов требуется поставщик контента, и вы не можете их использовать, если у вас нет этого
  • Разрешить многим приложениям безопасный доступ, использование и изменение отдельных данных. (что на самом деле является основной причиной его использования).