932 подписчика
А точно каждый компонент должен быть зарегистрирован в манифесте?
Нет, не точно. Broadcast Receiver можно зарегистрировать двумя способами: статически в манифесте или динамически в коде.
Стоит заметить, что начиная с Android 8 большинство неявных бродкастов нельзя регистрировать в манифесте. Неявный бродкаст, это когда сообщение отправляется вообще всем приложениям, которые подходят, а не только нашему. Почему нельзя? В Android 8 были большие доработки по оптимизации. Представьте, что куча приложений подписаны на какое-то системное событие. Каждый бродкаст в этом случае потребляет ресурсы каждый раз при получении сообщения. В следствии этого активно тратится батарея, пользователь грустит и удаляет приложение.
Но все еще можем регистрировать в коде.
Из тех, которые я помню:
ACTION_BOOT_COMPLETED — отправляется один раз при загрузке. Необходим для многих приложений, чтобы они все проинициализировались, запланировали что им надо и прочее.
ACTION_TIMEZONE_CHANGED и похожие — чтобы приложении могли свои настройки поправить (например, будильники).
ACTION_CONNECTION_STATE_CHANGED — чтобы приложения знали про соединение.
Еще есть всякие флаги, связанные со звонками, сообщениями, сетью и сменой/удаления пользователя.
Google рекомендует использовать JobSheduler вместо неявных бродкастов.
Какие вопросы можно задать из этого ответа?
— А какие еще ограничения есть?
— Что за JobSheduler и почему его?
1 минута
13 марта 2022
137 читали