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