Допустим приложение не запущено и ресивер, зарегистрированный в манифесте, получает событие. В этом случае система стартует процесс приложения и вызывает BroadcastReceiver.onReceive() в главном потоке. Фоновые процессы имеют низкий приоритет, поэтому после завершения метода
onReceive()
система убивает процесс приложения. Если в onRecieve()
запустить фоновый поток, о котором не знает система, например, чтобы выполнить запрос на бэкенд, процесс все равно будет убит.Для выполнения фоновых потоков в
onReceive()
используется метод goAsync(), который сохраняет BroadcastReceiver
после завершения onReceive()
. Но даже с использованием метода goAsync()
жизнь ресивера ограничивается 10 секундами.Для выполнения действительно длительных операций рекомендуется использовать Foregorund service или JobIntentService, которые можно запустить в
onReceive()
.Подробнее в документации.