Найти тему

А точно каждый компонент должен быть зарегистрирован в манифесте?


Нет, не точно. Broadcast Receiver можно зарегистрировать двумя способами: статически в манифесте или динамически в коде.

Стоит заметить, что начиная с Android 8 большинство неявных бродкастов нельзя регистрировать в манифесте. Неявный бродкаст, это когда сообщение отправляется вообще всем приложениям, которые подходят, а не только нашему. Почему нельзя? В Android 8 были большие доработки по оптимизации. Представьте, что куча приложений подписаны на какое-то системное событие. Каждый бродкаст в этом случае потребляет ресурсы каждый раз при получении сообщения. В следствии этого активно тратится батарея, пользователь грустит и удаляет приложение.

Но все еще можем регистрировать в коде.

Список всех интентов, для которых неявный бродкаст можно в манифесте регистрировать — вот.

Из тех, которые я помню:

ACTION_BOOT_COMPLETED — отправляется один раз при загрузке. Необходим для многих приложений, чтобы они все проинициализировались, запланировали что им надо и прочее.

ACTION_TIMEZONE_CHANGED и похожие — чтобы приложении могли свои настройки поправить (например, будильники).

ACTION_CONNECTION_STATE_CHANGED — чтобы приложения знали про соединение.

Еще есть всякие флаги, связанные со звонками, сообщениями, сетью и сменой/удаления пользователя.

Google рекомендует использовать JobSheduler вместо неявных бродкастов.

Какие вопросы можно задать из этого ответа?

— А какие еще ограничения есть?

— Что за JobSheduler и почему его?
1 минута
137 читали