Управление питанием платформы с помощью функции Doze

Чтобы продлить время работы устройства от батареи, Android может влиять на его состояние, отслеживая использование и активность. Платформа может переходить в спящий режим, чтобы приостанавливать выполнение действий, когда устройство не используется.

О спящем режиме

Спящий режим продлевает время работы от батареи, откладывая фоновые процессы ЦП и сетевую активность приложений, когда устройство долго не используется.

Бездействующие устройства в спящем режиме периодически переходят в перерыв на техническое обслуживание, в течение которого приложения могут выполнять отложенные задачи (синхронизацию, задания и т. д.). Затем спящий режим возобновляется на более длительный период, после чего снова наступает перерыв на техническое обслуживание. Платформа продолжает чередовать спящий режим и режим обслуживания, каждый раз увеличивая продолжительность бездействия, пока не будет достигнуто максимальное время спящего режима (несколько часов). Устройство в спящем режиме постоянно отслеживает движение и сразу же выходит из него, если движение обнаружено.

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

Производители устройств обычно настраивают критически важные системные сервисы так, чтобы они не переходили в спящий режим. Пользователи также могут исключать определенные приложения из спящего режима с помощью меню "Настройки". Однако исключение приложений может привести к более быстрому разряду батареи устройства. По умолчанию спящий режим отключен в AOSP. Подробнее о том, как его включить…

Требования к режиму Doze

Для поддержки режима Doze на устройстве должен быть сервис обмена сообщениями в облаке, например Firebase Cloud Messaging (FCM). Внешние триггерные события, например Cloud Messaging, могут временно выводить приложения из спящего режима, чтобы они выполнили свою работу, пока устройство находится в спящем режиме.

Для полной поддержки режима Doze на устройстве также должен быть значительный детектор движения (SMD). Однако для облегченного режима Doze в Android 7.0 и более поздних версий SMD не требуется. Если спящий режим включен на устройстве, которое:

  • Если датчик SMD есть, то выполняются все оптимизации спящего режима (включая упрощенные).
  • Нет SMD, выполняются только оптимизации Doze.

Жизненный цикл спящего режима

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

Платформа определяет, что устройство бездействует, если:

  • Устройство неподвижно (используется SMD).
  • Экран устройства выключен в течение определенного времени.

Спящий режим не включается, когда устройство с батареей подключено к зарядному устройству.

В спящем режиме

Платформа пытается поддерживать спящий режим системы, периодически возобновляя нормальную работу во время перерыва на техническое обслуживание, а затем возвращая устройство в спящий режим на более длительные повторяющиеся периоды. Во время сна действуют следующие ограничения:

  • У приложений нет доступа к сети.
  • Режим бодрствования приложения игнорируется.
  • Будильники отложены. Исключение составляют будильники и сигналы, установленные с помощью setAndAllowWhileIdle() (не более одного за 15 минут для каждого приложения в спящем режиме). Это исключение предназначено для приложений, которые должны показывать уведомления о напоминаниях о мероприятиях, например Календаря.
  • Поиск сетей Wi-Fi не выполняется.
  • Синхронизация SyncAdapter и задания JobScheduler отложены до следующего перерыва на техническое обслуживание.
  • Приложения, получающие SMS- и MMS-сообщения, временно добавляются в белый список, чтобы они могли завершить обработку.

Выйти

Платформа выводит устройство из спящего режима, когда обнаруживает:

  • Взаимодействие пользователя с устройством
  • Перемещение устройства
  • Экран устройства включается
  • Неминуемый сигнал будильника

Уведомления не выводят устройство из спящего режима.

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

Рисунок 1. Режимы Doze для стационарных и нестационарных устройств.

Действие спящий режим Легкий спящий режим
Триггер Экран выключен, устройство работает от батареи и неподвижно Экран выключен, устройство работает от батареи (не подключено к сети)
Время Последовательное увеличение периодов обслуживания Повторяющиеся N-минутные периоды с перерывами на техническое обслуживание
Ограничения Нет доступа к сети, запрета блокировки или поиска сетей GPS/Wi-Fi; запланированные операции и задания/синхронизация отложены. Нет доступа к сети; задания и синхронизация откладываются, кроме перерывов на техническое обслуживание
Поведение Получены только push-уведомления с высоким приоритетом Все сообщения в реальном времени (мгновенные сообщения, звонки и т. д.) получены. Push-уведомление с высоким приоритетом позволяет временно подключиться к сети.
Выйти Движение, включение экрана или будильник Работа экрана

Взаимодействие с режимом App Standby

  • Время, проведенное в режиме Doze, не учитывается в режиме App Standby.
  • Когда устройство находится в спящем режиме, бездействующим приложениям разрешается выполнять обычные операции хотя бы раз в день.

Интеграция спящего режима

Если спящий режим включен, устройства с поддержкой SENSOR_TYPE_SIGNIFICANT_MOTION выполняют полную оптимизацию спящего режима (включая упрощенную оптимизацию), а устройства без SMD – только упрощенную оптимизацию. Android автоматически выбирает подходящие оптимизации Doze, поэтому конфигурация поставщика не требуется.

Чтобы включить спящий режим на устройстве:

  1. Убедитесь, что на устройстве установлен сервис Cloud Messaging.
  2. В файле конфигурации оверлея устройства overlay/frameworks/base/core/res/res/values/config.xml задайте для параметра config_enableAutoPowerModes значение true:
    <bool name="config_enableAutoPowerModes">true</bool>
    
    В AOSP по умолчанию для этого параметра задано значение false (режим Doze отключен).
  3. Убедитесь, что предустановленные приложения и сервисы:
  4. Убедитесь, что необходимые сервисы исключены из спящего режима.

Советы

Тестирование и оптимизация приложений

Проверьте все приложения (особенно предустановленные) в спящем режиме. Подробнее о тестировании с помощью режима Doze и App Standby…