Обязательно ли BroadcastReceiver объявлять в манифесте

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

Ответ

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

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

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