Android. Собеседование #10. Services

Автор:

1. Какой жизненный цикл у Service?

onCreate()
Вызывается один раз при первом создании сервиса методом startService(). Не вызывается при повторном использовании метода startService().
– onStartCommand()
Вызывается каждый раз при получении сервисом команды, отправленной с помощью метода startService(). Метод может возвращать флаг, который запускает сервис в определённом режиме
– onBind()
Вызывается при привязке (сервис живёт, пока жив клиент)  сервиса к клиенту (Activity) при помощью метода bindService()
– onRebind()
Вызывается при повторной привязке сервиса к клиенту
– onUnbind()
Вызывается при отвязке сервиса от клиента
– onDestroy()
Вызывается при уничтожении сервиса

2. Какие существуют разновидности сервисов?

Сервисы можно разделить на три вида:

– Foreground Service
Сервис запущенный в данном режиме имеет высокий приоритет и не будет уничтожен системой, в случае нехватки памяти. Такой Service связывается с Notification, которое будет отображаться в статус баре. Запускается при помощи метода startForeground().
 Background Service
Работает в стандартном режиме, в фоне, в основном потоке приложения. Запускается при помощи метода startService().
– Bound Service
Service запущенный в данном режиме привязывается к какому-либо клиенту, например к Activity, и работает по принципу клиент-сервер. Service может быть привязан к нескольким клиентам, при этом система уничтожит сервис в случае, если все клиенты связанные с ним были уничтожены. Запускается при помощи метода bindService(). Для открепления сервиса от клиента используется метод unbindService(). При помощи интерфейса IBinder можно получить ссылку на наш сервис и вызывать методы непосредственно в нашем сервисе.

3. Что такое Intent Service?

Intent Service – наследник класса Service. В отличие от Service, выполняется асинхронно в отдельном потоке. Сервис запускается методом startService() в котором передается Intent с необходимыми данными для работы. Обрабатывает входящий Intent в методе onHandleIntent(). После завершения всех необходимых операций над данными сервис прекращает свою работу.

4. Какие флаги запуска можно задать сервису?

Метод  жизненного цикла сервиса onStartCommand()С может возвращать флаг, который описывает поведение сервиса, в случае если он был неожиданно остановлен, например системой из-за нехватки памяти: 
START_STICKY
Сервис будет заново запущен системой и продолжит работу
START_REDELIVER_INTENT
Сервис будет заново запущен системой и заново получит Intent который был передан методом startService() при запуске сервиса
START_NOT_STICKY
Сервис остается в остановленном положении и не будет заново запущен системой
STOP_FOREGROUND_REMOVE
Используется для отмены режима foreground и удаления Notification с которым связан сервис.

 

Ваш адрес email не будет опубликован. Обязательные поля помечены *