Обязательно ли регистрировать BroadcastReceiver в AndroidManifest

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

Ответ

Нет, не обязательно. BroadcastReceiver можно зарегистрировать двумя способами:

  1. Статически - в AndroidManifest.xml (для системных широковещательных сообщений, например BOOT_COMPLETED):
<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>
  1. Динамически - через код (для broadcast'ов, отправляемых внутри приложения):
val receiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        // Обработка события
    }
}
registerReceiver(receiver, IntentFilter("CUSTOM_ACTION"))

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