Проверяет знание областей видимости и времени жизни разных способов регистрации.
При объявлении в манифесте приёмник работает даже если приложение не запущено (до Android 8.0, с ограничениями в O+), а runtime-регистрация (registerReceiver) действует только пока жив активный компонент (Activity/Service) и служит для динамических фильтров. Manifest-регистрация удобна для системных событий, runtime — для событий в пределах экрана.
Манифест
Приёмник живёт всё время, получает Intent от системы.
Ограничен в Android O+ для большинства событий (нужен Foreground Service).
Runtime
context.registerReceiver(receiver, filter) в onStart/onResume, unregisterReceiver в onStop/onPause.
Подписка динамическая, меньше ресурсов, можно менять фильтр.
Использование:
Manifest: подключение по загрузке системы (BOOT_COMPLETED).
Runtime: реакции внутри UI (изменение сети, custom-Broadcast).
Вывод:
Выбирайте manifest для долговременных событий, runtime — для кратковременных.