Ответ
В Android есть два основных типа BroadcastReceiver:
- Статические (зарегистрированные в манифесте)
Объявляются в AndroidManifest.xml, работают даже когда приложение не запущено.
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
- Динамические (регистрируются в коде)
Работают только когда активен компонент (Activity/Service), где зарегистрированы.
val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
// Обработка
}
}
registerReceiver(receiver, IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED))
Также различают:
- Явные (explicit) - направлены конкретному компоненту
- Неявные (implicit) - обрабатываются всеми подходящими ресиверами
Начиная с Android 8.0 (API 26) введены ограничения на неявные Broadcasts для оптимизации батареи.