Использование ContentResolver

Я новичок в домене andriod и нахожусь в фазе обучения. У меня есть пара запросов:

Есть ли у нас один объект ContentResolver для каждого приложения? Это одноэлементный объект? Кто управляет жизненным циклом этого объекта? Если это синглтон, как он обрабатывает несколько запросов на запрос ContentProvider?


person loc    schedule 16.01.2013    source источник


Ответы (1)


Из блога Алекса Локвуда — http://www.androiddesignpatterns.com/2012/06/content-resolvers-and-content-providers.html

Что такое преобразователь контента?

Content Resolver — это единственный глобальный экземпляр в вашем приложении, который обеспечивает доступ к вашим (и другим приложениям) поставщикам контента. Content Resolver ведет себя точно так, как следует из его названия: он принимает запросы от клиентов и разрешает эти запросы, направляя их поставщику контента с определенными полномочиями. Для этого Content Resolver сохраняет сопоставление между центрами и поставщиками контента. Этот дизайн важен, поскольку он обеспечивает простые и безопасные средства доступа к поставщикам контента других приложений.

Content Resolver включает методы CRUD (создание, чтение, обновление, удаление), соответствующие абстрактным методам (вставка, удаление, запрос, обновление) в классе Content Provider. Content Resolver не знает реализации Content Providers, с которыми он взаимодействует (да и не должен знать); каждому методу передается URI, указывающий Content Provider, с которым необходимо взаимодействовать.

Что такое контент-провайдер?

В то время как Content Resolver обеспечивает абстракцию от Content Providers приложения, Content Providers обеспечивает абстракцию от базового источника данных (т.е. базы данных SQLite). Они предоставляют механизмы для определения безопасности данных (т. е. путем обеспечения разрешений на чтение/запись) и предлагают стандартный интерфейс, который связывает данные в одном процессе с кодом, выполняющимся в другом процессе.

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

Жизнь запроса

Так что же представляет собой пошаговый процесс простого запроса? Как описано выше, когда вы запрашиваете данные из своей базы данных через поставщика содержимого, вы не взаимодействуете с поставщиком напрямую. Вместо этого вы используете объект Content Resolver для связи с поставщиком. Конкретная последовательность событий, происходящих при выполнении запроса, приведена ниже:

  • Выполняется вызов getContentResolver().query(Uri, String, String, String, String). Вызов вызывает метод query
    Content Resolver, а не метод ContentProvider's.

  • Когда вызывается метод query, Content Resolver анализирует аргумент uri и извлекает его полномочия.

  • Content Resolver направляет запрос поставщику контента, зарегистрированному в (уникальном) органе. Это делается путем вызова метода query поставщика контента
    .

  • При вызове метода Content Provider's query выполняется запрос и возвращается Cursor (или генерируется исключение). Итоговое
    поведение полностью зависит от реализации поставщика контента
    .

person Dharmendra    schedule 10.01.2014