Какие знаешь ограничения на выполнение операций внутри Broadcast Receiver

«Какие знаешь ограничения на выполнение операций внутри Broadcast Receiver» — вопрос из категории Android компоненты, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Broadcast Receiver выполняются в основном потоке, поэтому длительные операции (>10 секунд) могут привести к ANR. Для фоновых задач лучше использовать goAsync() или запускать IntentService/JobIntentService.

Пример с goAsync():

override fun onReceive(context: Context, intent: Intent) {
    val pendingResult = goAsync()
    thread {
        // Долгая операция
        pendingResult.finish()
    }
}

Другие ограничения:

  • Нельзя показывать диалоги напрямую
  • Не рекомендуется обновлять UI
  • В Android 8+ нельзя регистрировать неявные ресиверы в манифесте (кроме исключений)