Ответ
Broadcast Receiver выполняются в основном потоке, поэтому длительные операции (>10 секунд) могут привести к ANR. Для фоновых задач лучше использовать goAsync() или запускать IntentService/JobIntentService.
Пример с goAsync():
override fun onReceive(context: Context, intent: Intent) {
val pendingResult = goAsync()
thread {
// Долгая операция
pendingResult.finish()
}
}
Другие ограничения:
- Нельзя показывать диалоги напрямую
- Не рекомендуется обновлять UI
- В Android 8+ нельзя регистрировать неявные ресиверы в манифесте (кроме исключений)