33
другой стороны, со временем приоритет самостоятельно работающего сервиса
понижается и его шансы быть принудительно остановленным системой в
случае нехватки ресурсов повышаются. В
связи с этим имеет смысл
проектировать сервис таким образом, чтобы через некоторое время он
требовал у системы перезапуска. В случае если система все таки экстренно
завершила работу сервиса, она перезапустит его как только освободятся
ресурсы.
Подробнее о создании, использовании и удалении сервисов:
http://developer.android.com/guide/components/services.html;
http://developer.android.com/guide/components/processes-and-threads.html.
2.4.3 Контент-провайдеры (Content Providers)
Контент-провайдер управляет доступом к хранилищу данных. Для
реализации провайдера в Android приложении должен быть создан набор
классов в соответствии с манифестом приложения.
Один из этих классов
должен быть наследником класса ContentProvider, который обеспечивает
интерфейс между контент-провайдером и другими приложениями. Основное
назначение этого компонента приложения заключается в предоставлении
другим приложениям доступа к данным, однако ничто не мешает в
приложении иметь активность, которая позволит пользователю запрашивать и
изменять данные, находящиеся под управлением контент-провайдера.
В мобильных приложениях контент-провайдеры необходимы в
следующих случаях:
приложение предоставляет сложные
данные или файлы другим
приложениям;
приложение позволяет пользователям копировать сложные
данные в другие приложения;
приложение предоставляет специальные варианты поиска,
используя поисковую платформу (framework).
Если
приложение
требует
использования
контент-провайдера,
необходимо выполнить несколько этапов для создания этого компонента:
1.
Проектирование способа хранения данных. Данные, с которыми
работают контент-провайдеры, могут быть организованы двумя способами:
Данные представлены файлом, например, фотографии, аудио или
видео. В этом случае необходимо хранить данные в собственной области
памяти приложения. В ответ на запрос от другого приложения, провайдер
может возвращать ссылку на файл.
Данные представлены
некоторой структурой, например, таблица,
массив. В этом случае необходимо хранить данные в табличной форме.
Строка таблицы представляет собой некоторую сущность, например,
сотрудник или товар. А столбец - некоторое свойство этой сущности,
например, имя сотрудника или цена товара. В системе Android общий способ
хранения подобных данных - база данных SQLite, но можно использовать
любой способ постоянного хранения.
34
Больше о хранении данных в Android можно узнать по
ссылке: http://developer.android.com/guide/topics/providers/content-provider-
creating.html#DataStorage
2.
Создание класса-наследника от класса ContentProvider напрямую
или через любого его потомка. При этом в реализации класса необходимо
переопределить (т. е. написать свою реализацию) обязательные методы.
query()
- метод, извлекающий данные из провайдера, в качестве аргументов
получает таблицу, строки и столбцы, а также порядок сортировки
результата, возвращает объект типа Cursor.
insert()
- метод, добавляющий новую строку, в качестве аргументов
получает таблицу, и значения элементов строки, возвращает URI
добавленной строки.
update()
- метод, обновляющий
существующие строки, в качестве
аргументов получает таблицу, строки для обновления и новые
значения элементов строк, возвращает количество обновленных
строк.
delete()
- метод, удаляющий строки, в качестве аргументов принимает
таблицу и строки для удаления, возвращает количество удаленных
строк.
getType() - метод, возвращающий String в формате MIME, который описывает
тип
данных,
соответствующий
URI.
Подробнее:http://developer.android.com/guide/topics/providers/content-
provider-creating.html#MIMETypes
onCreate() - метод,
вызываемый системой, сразу после создания провайдера,
включает инициализацию провайдера. Стоит отметить, что
провайдер не создается до тех пор, пока объект ContentResolver не
попытается получить к нему доступ.
Созданный контент-провайдер управляет доступом к структурированным
данным, выполняя обработку запросов от других приложений. Все запросы, в
конечном итоге, вызывают объект ContentResolver, который в свою очередь
вызывает подходящий метод объекта ContentProvider для получения доступа.
Все
вышеперечисленные
методы,
кроме onCreate(),
вызываются
приложением-клиентом. И все эти методы имеют такую же сигнатуру, как
одноименные
методы
класса ContentResolver.
Подробнее
о
классе ContentProvider: http://developer.android.com/guide/topics/providers/conte
nt-provider-creating.html#ContentProvider
3.
Определение строки авторизации провайдера, URI для его строк и
Достарыңызбен бөлісу: