В чем разница между статической и динамической регистрацией BroadcastReceiver

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

Ответ

Статическая регистрация объявляется в AndroidManifest.xml и работает даже когда приложение не запущено (до Android 8.0). После Android 8.0 ограничена системными событиями.

<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

Динамическая регистрация выполняется в коде через registerReceiver() и работает только при активном процессе приложения. Требует явной отмены через unregisterReceiver().

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

Ключевые отличия:

  • Жизненный цикл (статика — вне приложения, динамика — только при работе)
  • Гибкость (динамика позволяет регистрировать/отменять по необходимости)
  • Ограничения (на новых версиях Android статика работает только для системных событий)