30
метода onResume(). Пока активность находится в этом состоянии ее процесс
не может быть уничтожен системой.
Приостановлена. Активность частично видима, однако фокус
ввода потерян. В это состояние активность попадает после вызова
метода onPause() ( рис. 3.4). В этом состоянии
активность поддерживается в
"боевой готовности", т.е. в любой момент может получить фокус ввода и
стать активной. Однако в этом состоянии процесс активности может быть
уничтожен системой, в случае экстремальной нехватки памяти.
Остановлена. Активность полностью невидима. В это состояние
активность попадает после вызова метода onStop()( рис. 3.4). В этом
состоянии активность может быть "вызвана к жизни", она сохраняет все
состояния и необходимую для восстановления информацию, однако процесс
активности
может быть уничтожен, если память понадобится для других
целей.
2.4.2 Сервисы (Services)
Сервис (Service) является компонентом приложения, предназначенным
для выполнения длительных операций в фоновом режиме. Существует два
способа существования сервисов:
первый заключается в том, что сервис запущен (started) и работает
самостоятельно в фоновом режиме, так он может
работать неопределенно
долго, пока не выполнит свою задачу;
второй заключается в том, что сервис привязан (bound) к
некоторому компоненту или нескольким компонентам, в этом случае сервис
предлагает интерфейс для взаимодействия с компонентом и работает пока
привязан хотя бы к одному компоненту, как только связь со всеми
компонентами разрывается сервис завершает свою работу.
Для создания сервиса необходимо создать класс-наследник класса Service
напрямую или через любого его потомка. При
этом в реализации класса
необходимо переопределить (т. е. написать свою реализацию) некоторые
методы, управляющие ключевыми аспектами жизненного цикла сервиса и
обеспечивающие механизм связывания компонентов с сервисом, в
соответствующем случае. Рассмотрим наиболее важные методы требующие
реализации при создании сервиса.
onStartCommand() -
метод, вызываемый системой,
когда некоторый
компонент,
например
активность,
вызывает
метод startService(). В этом случае сервис запускается и
может работать в фоновом режиме неопределенно долго,
поэтому необходимо позаботиться об остановке сервиса,
когда он выполнит свою работу. Для остановки сервиса
используется метод stopSelf() в случае, когда сервис сам
прекращает
свою работу, илиstopService() в случае, когда
работу сервиса прекращает некоторый компонент. Нет
необходимости
писать
реализацию
31
методаonStartCommand(),
если
не
предполагается
самостоятельной работы сервиса (т. е. он будет работать
только в связке с некоторыми компонентами).
onBind()
-
метод, вызываемый системой, когда некоторый
компонент желает привязать к себе сервис и вызывает
метод bindService(). Этот
метод должен возвращать
реализацию интерфейса IBinder, которая может быть
использована компонентом-клиентом для взаимодействия
с сервисом. Метод onBind() необходимо реализовать в
любом случае, но, если не предполагается связывания
сервиса с
какими-либо компонентами, возвращаемое
значение должно быть равным null.
Необходимо отметить, что сервис может быть запущен как
самостоятельная единица, а в последствии может быть привязан к некоторым
компонентам. В этом случае в сервисе должны быть обязательно реализованы
оба метода onStartCommand() и onBind().
onCre
ate()
- метод, вызываемый системой, при первом обращении к
сервису для выполнения первоначальных настроек.
Этот метод
вызывается до вызова методов onStartCommand() и/или onBind().
onDes
troy()
- метод, вызываемый системой, когда сервис либо выполнил
все действия, для которых создавался, либо больше не связан ни с
одним компонентом, т. е. его услуги больше не требуются. В
реализации
этого
метода
необходимо
предусмотреть
освобождение
всех
ресурсов,
таких
как
потоки,
зарегистрированные слушатели, приемники и т. д. Вызов этого
метода является последними вызовом, который может получить
сервис.