Какие ограничения на BroadcastReceiver были введены в Android 8.0?

Посмотреть в Telegram: @AndroidSobes/35
Если ресивер зарегистрирован в андроид манифесте, приложение запускается в фоне каждый раз при отправке соответствующего броадкаст события. При отправке популярных событий системы (например CONNECTIVITY_ACTION) одновременно стартует много приложений, подписанных на эти события, что в свою очередь приводит к интенсивному использованию батарейки.

Ограничения на броадкасты начали вводить в Android 7, но в 8й версии они стали более строгими и общими. Ограничения касаются приложений с targetSdkVersion = 26.

* Неявные (implicit) броадкасты, зарегистрированные в андроид манифесте, больше не работают (кроме некоторых исключений). Неявный броадкаст – это тот, который предназначается не для конкретного приложения. Например ACTION_LOCALE_CHANGED – неявный броадкаст, т.к. отправляется при изменении языка в системных настройках и принимается всеми приложениями с интент фильтром, содержащим этот action.

* Ограничения не касаются Явных (explicit) броадкастов, даже если они зарегистрированы в андроид манифесте. Пример явного броадкаста: ACTION_MY_PACKAGE_REPLACED отправляется только тому приложению, которое было обновлено.

* Разрешается динамическая регистрация неявных броадкастов через context.registerReceiver(). Такая регистрация действует только пока запущен процесс приложения.

* Ограничения не действуют на неявные броадкасты, которые требуют signature permission.

Начиная с Android 8, вместо прослушивания неявных броадкастов предлагается использовать JobScheduler.