Почему рекомендуется объявлять BroadcastReceiver в run-time

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

Ответ

Объявление BroadcastReceiver в run-time (через registerReceiver()) рекомендуется, когда нужно реагировать на динамические события только во время работы приложения. Это экономит ресурсы, так как ресивер не активен в фоне, и предотвращает утечки памяти.

Пример:

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

// Регистрация в onCreate/onStart
val filter = IntentFilter("SOME_ACTION")
registerReceiver(receiver, filter)

// Обязательно отписываться в onDestroy/onStop
unregisterReceiver(receiver)

Плюсы:

  • Контроль жизненного цикла (избегаем утечек)
  • Работает только когда нужно (оптимизация батареи)
  • Гибкость (можно регистрировать/отменять по условиям)

Manifest-объявление (<receiver>) уместно для системных событий (BOOT_COMPLETED), но требует явного экспорта и проверок безопасности.