Когда использовать поставщика контента

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

В прошлом я только что реализовал SQliteOpenHelper для доступа к данным из моей базы данных, но я рассматриваю возможность создания Content Provider. Я чувствую, что подход URI к запросам данных ясен и краток. С другой стороны, использование Content Provider только для моего приложения будет избыточным (поскольку в нем у меня будет класс SQliteOpenHelper) и больше работы, чем мне нужно?

Ответ 1

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

Однако мне интересно, есть ли у кого-нибудь мысли о том, как сделать контент-провайдера используемым только в вашем собственном приложении.

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

Ответ 2

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

Хорошая практика - обеспечить дополнительный уровень абстракции над вашими данными, чтобы облегчить внутреннее изменение. Что делать, если вы решите изменить базовую структуру базы данных позднее? Если вы используете ContentProvider, вы можете содержать все структурные изменения внутри него, где, как если бы вы его не использовали, вы вынуждены изменять все области кода, на которые влияют структурные изменения. Кроме того, приятно иметь возможность повторно использовать один и тот же стандартный API для доступа к данным, а не засорять ваш код низкоуровневым доступом к базе данных.

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

Затем там требуются и рекомендуются другие части Android, где ContentProvider, например, при использовании SyncAdapter, и если вы хотите, чтобы виджет приложения, который включает в себя доступ к данным, например.

В целом, очень мало накладных расходов при написании ContentProvider вверх (после того, как вы узнали API, что является хорошей идеей), поэтому имеет смысл сделать это даже для частных данных.

Ответ 3

Взгляните на студию MOTODEV для Eclipse. Это среда разработки, расширяющая Eclipse. У них есть инструмент, в котором вы можете автоматически генерировать поставщика контента для базы данных. Если поставщик контента упрощает доступ к вашим данным и не оказывает существенного влияния на производительность, используйте его. В большинстве случаев это будет иметь место.

Ответ 4

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

Здесь сценарий, в котором у вас может быть 5 таблиц в вашей базе данных, но перед их использованием вам нужно присоединиться к нескольким из них. И создайте URI для каждого из этих объединений. Затем вы можете использовать эти URI как таблицу:)

Я предлагаю вам продолжить работу с Content Provider, вы будете поражены тем, насколько он эффективен.

Ответ 5

В моей точке зрения, контент-провайдер приходит с множеством преимуществ, оставляя в покое просто обмен данными с другими приложениями. Если вам нужно синхронизировать с сервером с помощью адаптера синхронизации, используйте облачную службу обмена сообщениями Google, автоматически обновляйте пользовательский интерфейс, когда базовые данные в БД меняются с помощью Loaders, реализуют поиск, используют виджеты... тогда поставщик контента для вас.

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

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

Ответ 6

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

  • Он действует как уровень абстракции между вашим пользовательским интерфейсом и базой данных. Вы можете внедрить проверку данных в ContentProviders для проверки данных, введенных пользователем. Он также позволяет вам изменять структуру базы данных, не касаясь пользовательского интерфейса и других частей.
  • Они отлично сочетаются с другими классами каркаса Android, такими как SyncAdapter. Например, вы можете автоматически обновлять список, когда значение в базе данных изменяется с помощью ContentProviders вместе с CursorLoader. Без ContentProviders вы должны реализовать множество функций, подобных этим самостоятельно.
  • Мы можем безопасно разоблачить наши личные данные в других приложениях. Использование ContentProviders позволит нам легко и безопасно делиться нашими данными с другими приложениями.

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

Ответ 7

Как указано в документации: Создание поставщика контента

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

Так зачем беспокоиться об этом накладных расходах? Вам нужно легче и быстрее развиваться, не так ли? Таким образом, достаточно одного уровня абстракции (SQLiteOpenHelper descendent).

См. Оккасовая бритва Не делайте сущности без уважительной причины.

Ответ 8

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