Можно ли объявить Broadcast Receiver динамически

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

Ответ

Да, Broadcast Receiver можно объявить динамически в коде. Для этого нужно создать экземпляр класса BroadcastReceiver и зарегистрировать его с помощью registerReceiver().

val receiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        // Обработка события
    }
}

val filter = IntentFilter("com.example.ACTION_EVENT")
registerReceiver(receiver, filter)

Важно не забыть отменить регистрацию в onDestroy() или другом подходящем месте, иначе будет утечка памяти:

override fun onDestroy() {
    super.onDestroy()
    unregisterReceiver(receiver)
}

Динамическая регистрация удобна, когда приемник нужен только при жизни Activity/Service. Для системных событий (BOOT_COMPLETED и т.д.) требуется статическая регистрация в манифесте.