Ответ
Объявление 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), но требует явного экспорта и проверок безопасности.