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