<<
>>

Поставщики контента

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

Например, в нашем почтовом приложении из листинга 10.5 поставщик контекста указывает, что его полномочие — это com.example.emailpmmder.emaU. Стало быть, URI- индикаторы, работающие на этот поставщик контента, должны начинаться с

content://com.example.email.provider.email/

Суффикс для этого URI интерпретируется самим поставщиком для определения того, какие данные внутри него будут доступны. В этом примере обычным соглашением будет то, что URI

content://com.example.email.provider.email/messages

означает список всех почтовых сообщений, а content://com.example.email.provider.email/messages/1

предоставляет доступ к одному сообщению с номером ключа 1.

Для взаимодействия с поставщиком контента приложения всегда проходят через использование системного API-интерфейса по имени ContentResolver, где у большинства методов имеется начальный URI-аргумент, показывающий данные, с которыми нужно работать. Одним из наиболее востребованных методов ContentResolver является query, осуществляющий запрос к базе данных по заданному URI и возвращающий Cursor для извлечения структурированных результатов. Например, извлечение сводки обо всех доступных почтовых сообщениях будет иметь примерно следующий вид:

query("content://com.example.email.provider.email/messages")

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

Порядок обработки системой нашего примера запроса показан на рис. 10.40:

1. Приложение вызывает ContentResolver.query для начала операции.

2. URI-полномочия вручаются диспетчеру активностей, чтобы он нашел (через диспетчер пакетов) соответствующего поставщика контента.

3. Поставщик контента еще не работает, поэтому он создается.

4. После создания поставщик контента возвращает диспетчеру активностей свой IBinder, реализуя тем самым системный интерфейс IContentProvider.

5. IBinderпоставщика контента возвращается в распознаватель контента —Content- Resolver.

6. Теперь распознаватель контента может завершить исходную операцию query, вызвав соответствующий метод в отношении AIDL-интерфейса, возвращающий результат Cursor.

Поставщики контента являются одним из основных механизмов для осуществления взаимодействия между приложениями. Например, если вернуться к ранее описанной

Рис. 10.40. Взаимодействие с поставщиком контента

системе использования общего контента, показанной на рис. 10.35, то поставщики контента являются способом реального переноса данных. Полностью ход этой операции можно описать следующим образом:

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

2. Система требует от ContentResolverMIME-тип данных, указанных в этом URI. Это действие во многом похоже на только что рассмотренный метод query, но требует от поставщика контента возвратить строку MIME-типа для URI.

3. Система ищет все активности, которые могут получить данные этого идентифицированного MIME-типа.

4. Пользователю показывается пользовательский интерфейс для выбора одного из возможных получателей.

5. Когда одна из активностей выбрана, система ее запускает.

6. Активность, обрабатывающая общий контент, получает URI совместно используемых данных, извлекает его данные с помощью ContentResolver и выполняет соответствующую операцию: создает адрес электронной почты, сохраняет его и т. д.

10.8.9.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Поставщики контента:

  1. 3. Исполнение договора поставки. Обязанности поставщика.
  2. Статья 808. Ответственность продавца (поставщика) предмета договора лизинга
  3. КОНТЕНТ - АНАЛИЗ
  4. Контент-анализ телепередач
  5. Контент-анализ СМИ
  6. 2.3. Методология и методика контент-анализа
  7. Таблица контент-критериев для анализа показаний
  8. Глава 12 Другие способы использования публично доступного контента (UGC)
  9. Статистическая обработка.
  10. 4. Исполнение обязательств по государственному контракту
  11. 5. Ответственность сторон.
  12. 2. Основания поставки товаров для государственных нужд
  13. 4. Особенности исполнения обязательств. Оплата товаров (ст. 531, 532 ГК).