получать, когда служба отключена

#android #service

#Android #Обслуживание

Вопрос:

Я создаю приложение, в котором мне нужна служба, которая никогда не остановится, как системные службы Android. Я могу перезапустить свою службу системой, используя start_not_sticky, но нет никакой гарантии, что моя служба никогда не остановится. Итак, моя идея заключается в том, что если есть какой-либо способ широковещательного приема, когда моя служба будет отключена, я могу перезапустить службу. Есть ли какой-нибудь способ получить это?

Комментарии:

1. Я думаю, что вы можете что-то сделать с onDestroy()………..

2. почему вы не запускаете свою службу на переднем плане? startForeground() предназначен для запуска критически важных служб.

Ответ №1:

Документация объясняет это лучше всего :

  • Используйте startForeground(int, Notification) API, чтобы перевести службу в состояние переднего плана, когда система считает, что это то, о чем пользователь активно осведомлен, и, следовательно, не является кандидатом на уничтожение при нехватке памяти. (Теоретически все еще возможно, что служба будет отключена из-за чрезмерной нехватки памяти в текущем приложении переднего плана, но на практике это не должно вызывать беспокойства.)

  • Обратите внимание, что это означает, что большую часть времени ваша служба работает, она может быть отключена системой, если она находится под большим давлением памяти. Если это произойдет, система позже попытается перезапустить службу. Важным следствием этого является то, что если вы реализуете onStartCommand() для планирования выполнения работы асинхронно или в другом потоке, то вы можете захотеть использовать START_FLAG_REDELIVERY , чтобы система повторно доставила вам Intent, чтобы оно не потерялось, если ваша служба будет уничтожена во время ее обработки

Комментарии:

1. на самом деле я использую метод startForeground() в одном из своих приложений, но, к сожалению, он не работал должным образом, тем не менее, в то время моя служба иногда останавливалась системой. затем я решил проблему с помощью alarm, вызвав сигнал тревоги, когда мне нужно выполнить какую-то работу. Вы знаете, что тревога стоит дорого, если учитывать расход батареи. вот почему мне нужно что-то получше.