Точная разница между "контент-провайдером" и " базой данных SQLite"
Я сделал SQLite Программирование базы данных для Android, но я ничего не знаю о
Контент-провайдер кроме этого: "как я уже говорил страница разработчика Android , Android SDK объяснил о "контент-провайдере", поскольку он используется для хранения и извлечения данных."
но потом
- какова точная разница между" контент-провайдером "и"базой данных SQLite"?
- что лучше всего хранить данные, когда ?
любой пример и помогает !!
9 ответов:
Я нашел одно главное отличие, а именно:
хранение данных в базе данных является одним из хороших способов сохранить ваши данные, но есть один нюанс в Android-базы данных, созданные в Android являются
visibleтолько для приложения, которое их создало. То есть, база данных SQLite, созданная на Android одним приложением, может использоваться только этим приложением, а не другими приложениями.Итак, если вы
need to share data between applications, you need to use the content provider model as recommended in Android.эта статья представляет основы контент-провайдеров и как их можно реализовать.Я нашел эту статью в этой ссылке
действительно хорошая информация предоставлена.
какова точная разница между "Контент-провайдер" и " SQLite База данных"?
ContentProviderэто фасад -- API, который вы можете реализовать, который предоставляет базы данных другим процессам. Это можете реализовано таким образом, что данные хранятся в базе данных SQLite, но это не обязательно.что лучше всего хранить данные, когда ?
на это невозможно ответить абстрактно. Обычно говоря, если что-то не требует от вас использовать
ContentProvider, просто используйте базу данных.
Я сделал много хороших приложений с тысячами пользователей, используя их, которые просто использовали методы SQLite. Но это было некоторое время назад, и мне пришлось вручную написать много кода, о котором теперь можно легко позаботиться с помощью ContentProvider. Тогда я не был сторонником использования контент-провайдеров, потому что это, казалось, только добавляло сложности в код.
однако за последние пару лет, как Android эволюционировал, я перешел на ContentProvider, как это экономит время и позволяет сделать больше. Я сейчас используйте его широко. После того, как вы написали класс контент-провайдера, ваша жизнь становится намного проще. С ContentProvider я могу очень легко справиться с загрузчиками курсоров, обратными вызовами загрузчика и массовыми вставками, для которых мне приходилось писать все вручную в прошлом, и все же это не работало так эффективно. Особенно при обновлении представления списка, которое теперь автоматически обновляется благодаря только одному методу notifychange (). Это означает, что теперь мне не нужно вводить мои собственные слушатели и вручную обновлять содержимое в списковых представлениях и адаптерах. Кроме того, мне не нужно беспокоиться об открытии и закрытии баз данных или беспокоиться об утечках памяти. Это все обрабатывается поставщиком контента. Единственная проблема, с которой я иногда сталкиваюсь, заключается в том, что вы не можете делать некоторые сложные запросы в ContentProviders. В этом случае вы все еще можете использовать необработанные запросы и использовать старомодное ручное взаимодействие с sqlite.
Если вы ранее написали свой собственный DbAdapter, помощник и наблюдатель, вы можете безопасно переносите их в свои новые приложения, не тратя время на преобразование всего в ContentProvider. Но исходя из моего опыта, я бы очень рекомендовал перейти на ContentProvider. Это займет некоторое время, чтобы привыкнуть к нему, но как только вы получите опыт с ним, вы останетесь с ним.
обновление 2017 Теперь я переключился на область, гораздо лучший способ использовать базы данных на любой платформе. Потратьте несколько часов на его изучение и сэкономьте бесчисленные часы ваша карьера разработки приложений.
1. Поставщики контента не являются потокобезопасными
по умолчанию поставщики контента не являются потокобезопасными. Если у вас есть несколько потоков, использующих контент-провайдер, вы можете увидеть множество различных исключений и другие несоответствия данных. Самый простой способ исправить это-использовать ключевое слово synchronized для каждого из общедоступных методов, предоставляемых поставщиком контента.
таким образом, только один поток за раз может получить доступ к этим методам.
2. Играть приятно, когда делает много пишет
у меня есть необходимость в новом приложении Serval Maps импортировать данные из двоичных файлов в базу данных, используемую внутри приложения. Для того, чтобы сделать это и играть хорошо с остальной частью приложения лучше всего:
создать новый поток для выполнения импорта, чтобы другие потоки не пострадали, в частности поток, отвечающий за обновление пользовательского интерфейса; и Сделайте короткую паузу в конце каждого импорта, чтобы дать другим потокам, которые нужно использовать синхронизированные методы больше шансов.
3. Контент-провайдеры заставляют вас иногда думать боком
кстати, что контент-провайдеры в Android работают-обеспечить дополнительный уровень абстракции между кодом и базой данных. Это в основном связано с тем, насколько я могу судить, что контент-провайдеры могут получать доступ к данным из других мест, кроме баз данных.
Это означает, что вы не можете выполнить сырые SQL-запросы базовая база данных и вам нужно указать различные компоненты SQL-запроса, используя переменные, переданные различным методам, таким как метод запроса. Если у вас есть задача, которая не вписывается в способ обработки SQL поставщиком контента, у вас есть два варианта:
подумайте сбоку о запросе, возможно, вы можете получить данные, которые вам нужны, с помощью альтернативных запросов и доступа к результатам из курсора; и Используйте URI для обычного доступа к данным и специальный URI, который является сопоставляется с конкретным запросом для тех задач, которые не имеют альтернатив.
контент-провайдеры используются, когда вы хотите поделиться своими данными между приложениями.
Если у вас есть база данных, подключенная к приложению, и вы хотите, чтобы другое приложение использовало некоторые данные, вы можете реализовать контент-провайдера, который предоставляет данные
основное отличие: когда ваше приложение должно делиться информацией с другими приложениями, используйте Content-Provider. SQLite только хранение данных для приложения, которое его создает
Я прочитала ответ в поисках же сомнения, так что думал поделиться им. в нем говорится -
Это хорошая практика, чтобы обеспечить дополнительный уровень абстракции над данными, чтобы сделать его легче изменить внутренне. Что если вы решили изменить базовую структуру базы данных на более позднее время? Если вы используете ContentProvider, вы можете содержать все структурные изменения в нем, где, как если бы вы его не использовали, вы вынуждены изменить все области кода на которые влияют структурные изменения. Кроме того, приятно иметь возможность повторно использовать один и тот же стандартный API для доступа к данным, а не засорять свой код низкоуровневым доступом к базе данных.
таким образом, использование контент-провайдера было бы хорошей идеей.
подумайте о передовых системах управления контентом. Каждый объект (страница, изображение, новостная статья, элемент события и т. д.) имеет контент, адрес, разрешения пользователя и способы взаимодействия с ним из разных частей системы. Контент-провайдеры делают это для Android. Теперь вы можете обмениваться файлами или изображениями, которые вы, возможно, сохранили в своем приложении. Вы также можете создавать пользовательские общие объекты, такие как деловые контакты, редактируемые заметки и т. д. И укажите безопасность и приложение по умолчанию для работы с такими объект, когда вы открываете их из любого другого приложения.
одно отличие заключается в том, что контент-провайдеры имеют поддержку платформы для наблюдателей контента. Вам нужно будет реализовать свой собственный наблюдаемый шаблон для базы данных SQLite.
Comments