Android. Контент провайдер или база данных? - PullRequest
28 голосов
/ 22 ноября 2010

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

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

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

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

Мур

Ответы [ 3 ]

49 голосов
/ 22 ноября 2010

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

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

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

12 голосов
/ 22 ноября 2010

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

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

0 голосов
/ 03 декабря 2016

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

В итоге:

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