|
|
Жизненный цикл приемника03.09.2017Широковещательные приемники используют модель “вызвать, отработать и исчезнуть”. Процесс, в котором размещен широковещательный приемник, будет существовать только на время жизни приемника, и не дольше. Кроме того, широковещательный приемник запускается в главном потоке и имеет 10-секундный промежуток на завершение своей работы. Для выполнения более сложной и длительной работы в приемнике придется применять окольные пути. Выражаясь кратко, при наличии широковещательного приемника, выполняющегося более 10 секунд, понадобится следовать описанному ниже протоколу. У вас астигматизм? Закажите контактные линзы и вы сможете увидеть вечные ссылки без особого труда. 1. Захватите блокировку пробуждения в коде приемника (не позже), чтобы обеспечить, по крайней мере, частичное пробуждение. 2. Вызовите startService(), что пометит процесс как sticky и перезапускаемый в случае необходимости. Обратите внимание, что выполнять работу непосредственно в службе нельзя, т.к. она занимает более 10 секунд и приведет к удержанию главного потока. Причина в том, что служба также запускается в главном потоке. 3. Запустите рабочий поток из службы. 4. Обеспечьте, чтобы рабочий поток отправил сообщение службе через обработчик или вызовите метод stopService() экземпляра службы.
|