Конспект лекционных занятий



Pdf көрінісі
бет22/67
Дата26.09.2023
өлшемі2.41 Mb.
#478672
түріКонспект
1   ...   18   19   20   21   22   23   24   25   ...   67
kt 1

Рис. 2.5. Жизненный цикл сервиса 
(источник: http://developer.android.com/guide/components/services.html). 
На рис. 3.5 показан жизненный цикл сервиса, левая диаграмма 
показывает жизненный цикл самостоятельного сервиса, правая - жизненный 
цикл сервиса, привязанного к некоторым компонентам. На рисунке хорошо 
видно, что жизненный цикл сервиса намного проще жизненного цикла 
активности. Однако для разработчика понимание того, как именно сервис 
создается, запускается и завершает свою работу, может оказаться даже более 
важным, т. к. сервис работает в фоновом режиме и пользователь может и не 
осознавать, что в некоторых случаях он имеет дело с работой сервисов. 
Android принудительно останавливает работу сервисов только, когда 
ресурсов системы не хватает для активности, которая работает в данный 
момент на переднем плане. Приоритет работающих сервисов всегда выше, 
чем у приостановленных или полностью невидимых активностей, а если 
сервис привязан к выполняющейся активности, то его приоритет еще выше. С 


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 для его строк и 


Достарыңызбен бөлісу:
1   ...   18   19   20   21   22   23   24   25   ...   67




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет