Как работает Doze в Android 7

Официально система экономии энергии Doze появилась в Android 6, но в Android 7 ее функциональность существенно расширилась.

Функция Doze в Android 6 активна только тогда, когда телефон\планшет отключен от зарядки, не используется более чем 30 минут и у него отключен (погашен) экран.

В Android 7.0 функция Doze имеет два уровня, и может запускаться в любое время, когда девайс работает от аккумулятора, а экран аппарата выключен. На первом уровне по истечении некоторого времени приложения отключаются от сети, и все функции синхронизации, а также фоновые задачи откладываются на определенный период обслуживания, длительность которого устанавливается системой Android. Нормальная работа возобновляется только тогда, когда пользователь ставит свой смартфон на зарядку или включает его экран.

Если девайсом никто не пользуется и он лежит без движения или когда на нём уже запустился первый уровень Doze, и устройство продолжает оставаться неподвижным, тогда активизируется второй уровень Doze, утверждая дополнительные ограничения. Конкретно происходит вот что:

  1. игнорируются все Wakelocks;
  2. запуск всех Alarms, Syncs и Jobs откладывается;
  3. ограничивается доступ в интернет;
  4. ограничивается сканирование сетей GPS и Wi-Fi.

Если Ваше приложение задействует любой из этих API-интерфейсов, подвергающихся ограничению, важно понимать, что оно может в определённое время не выполнять тех действий, которых Вы от него ожидаете.

Для большей понятности вот вам картинка, иллюстрирующая загрузку системы и передачу данных в обычном режиме, и режимах Doze-1 и Doze-2:

Понятие Maintenance window (окно обслуживания) означает, что в режиме Doze устройство периодически просыпается, сканируя сети, включая ограниченный доступ в сеть и позволяя отработать Wakelocks. В принципе, периодичность этих окон регулируется установками в Андроиде — но по умолчанию в режиме Doze-1 окна обслуживания вызываются не чаще раза в 9 минут, а в Doze-2 еще в несколько раз реже.

Впрочем, в работе функции Doze есть одна лазейка, касающаяся Push-уведомлений и сообщений от Google Cloud Messaging. Все послания с пометкой «высокий приоритет» будут по-прежнему доходить до устройства, несмотря на активность функции Doze.

Многие приложения могут пользоваться AlarmManager для планирования таких событий, как календарные уведомления. Чтобы избежать возможных ошибок, к AlarmManager в API 23 (то есть начиная с Андроид 6) были добавлены два новых метода: SetAndAllowWhileIdle и SetExactAndAllowWhileIdle. Смысл их ясен из названия. Они очень похожи, но SetExact позволяет сигнальному оповещению срабатывать в конкретный установленный промежуток времени вместо случайного. Эти сигнальные оповещения должны использоваться экономно, и им по-прежнему позволяется срабатывать только один раз в каждые 9 минут в одном приложении. Смысл SetExact состоит в том, что он сдвигает окно обслуживания, подгоняя его к нужному (заданному) времени срабатывания алярма — но затем окно не может быть вызвано снова раньше, чем через 9 минут. Нетрудно догадаться, что несколько SetExact вызовут конкуренцию — и потому даже они не дают абсолютной гарантии срабатывания алярма точно в нужное время, но система по крайней мере постарается сделать вызов возможно ближе к назначенному времени.

Новый API-интерфейс — диспетчер заданий, введённый в Android 5.0, теперь является частью сервисов Google Play в качестве GcmNetworkManager. Он дает разработчикам возможность планировать фоновые задачи и позволяет системе Android корректно запускать их, когда она начинает совмещение ряда задач для повышения эффективности работы приложений и экономии заряда аккумулятора, что отлично подходит для единовременных или периодических заданий.

Настоящий материал самостоятельно опубликован в нашем сообществе пользователем proper на основании действующей редакции Пользовательского Соглашения. Если вы считаете, что такая публикация нарушает ваши авторские и/или смежные права, вам необходимо сообщить об этом администрации сайта на EMAIL abuse@newru.org с указанием адреса (URL) страницы, содержащей спорный материал. Нарушение будет в кратчайшие сроки устранено, виновные наказаны.

You may also like...


Комментарии