Чтобы понять почему, кратко рассмотрим несколько фактов о широковещательных приемниках.
• Как и другие компоненты процесса Android, широковещательный приемник работает в главном потоке.
• Задержка выполнения кода в широковещательном приемнике приведет к задержке главного потока и, как следствие, к ошибке ANR.
• Ограничение по времени для широковещательного приемника составляет 10 секунд по сравнению с 5 секундами для активности. Это подобно отсрочке, но ограничение все же остается.
• Процесс, содержащий широковещательный приемник, запустится и прервется вместе с выполнением широковещательного приемника. Следовательно, процесс не будет продолжаться после того, как метод onReceive() широковещательного приемника вернет значение. Разумеется, сказанное справедливо, если процесс содержит только широковещательный приемник. Если же он содержит и другие уже выполняющиеся компоненты, такие как активности или службы, время жизни процесса учитывает также жизненные циклы этих компонентов. Возможно вам понадобится создание сайтов продвижение.
• В отличие от процесса службы, процесс широковещательного приемника не будет перезапущен.
• Если бы широковещательный приемник был запущен в отдельном потоке и выполнил возврат в главный поток, среда Android пришла бы к заключению, что работа выполнена, и завершила бы процесс даже при наличии выполняющихся потоков, приводя к их внезапному останову.
• Android прибегает к частичной блокировке пробуждения при вызове широковещательной службы и снимет эту блокировку при возврате из службы в главный поток. Блокировка пробуждения — механизм и класс API-интерфейса, доступный в SDK, который предназначен для предотвращения перевода устройства в спящий режим или его пробуждения, если оно уже переведено в спящий режим. Каким же образом с учетом всего сказанного запустить длительно выполняющийся код в ответ на широковещательное событие?