Когда использовать контент-провайдера - PullRequest
98 голосов
/ 08 февраля 2011

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

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

Ответы [ 9 ]

114 голосов
/ 19 марта 2012

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

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

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

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

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

54 голосов
/ 08 февраля 2011

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

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

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

7 голосов
/ 17 апреля 2011

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

4 голосов
/ 12 ноября 2016

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

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

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

4 голосов
/ 20 марта 2012

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

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

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

2 голосов
/ 07 ноября 2015

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

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

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

1 голос
/ 01 сентября 2016

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

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

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

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

0 голосов
/ 16 августа 2018

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

Следите за уровнем безопасности, и я бы порекомендовал использовать SQLcipher для шифрования данных при сбросе (DAR), если ваш провайдер контента выполняет запись в SQLite. (Я использовал контент-провайдера в нескольких решениях и предоставил возможность сделать «мгновенный снимок» операционных значений для отладки и тестирования.)

0 голосов
/ 22 июля 2015

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

...