Как останавливается служба с помощью метода stopSelf()?

Home » android » Как останавливается служба с помощью метода stopSelf()?
android, android service Комментариев нет

Как то я задался вопросом, как можно остановить вечную(липкую) службу.
Известно, что метод onStartCommand() сервиса возвращает один из трех флагов. START_STICKY, START_NOT_STICKY и START_REDELIVER_INTENT.
В случае, если метод возвращает START_STICKY, мы говорим службе, что она должна быть “липкой”, это означает, что система, будет всегда пытаться восстановить работу службы(с помощью простого рестарта*)

Как остановить службу, если она липкая?
Где нам необходимо поместить return START_NOT_STICKY?
Если мы будем останавливать службу в методе onStartCommand() вызовом метода stopSelf(), и поместим вызов stopSelf() перед return START_NOT_STICKY
завершится ли собственно вызов onStartCommand() нужным нам “нелипким” флагом?

Ответ – ДА!
Хотя это не кажется очевидным, но служба не начнет останавливаться, пока onStartCommand() не вернет результат.

*(Следует обратить внимание на то, что когда система восстанавливает убитую липкую службу, во входящий Intent
(сигнатура метода содержит аргумент Intent – public int onStartCommand(Intent intent, int flags, int startId) )
ничего не поступает, а значит, если в службе все же используется входящий Intent, следует его проверять на то не пуст ли он
if(intent != null))

LEAVE A COMMENT