Чтобы увеличить время автономной работы устройства, Android может влиять на его состояние, отслеживая использование устройства и бодрствование. Платформа может переходить в состояние сна, чтобы приостановить выполнение действий, пока устройство не используется.
О дозе
Doze продлевает срок службы батареи, откладывая фоновую активность ЦП и сети приложений, когда устройство не используется в течение длительного времени.
Неработающие устройства в Doze периодически переходят в период обслуживания, в течение которого приложения могут завершить ожидающую работу (синхронизацию, задания и т. д.). Затем Doze возобновляет сон на более длительный период времени, после чего следует еще одно окно обслуживания. Платформа продолжает последовательность режима сна/обслуживания Doze, каждый раз увеличивая продолжительность простоя, пока не будет достигнуто максимальное время ожидания в несколько часов. Устройство в режиме Doze всегда распознает движение и немедленно покидает режим Doze, если обнаружено движение.
Android 7.0 и более поздние версии расширяют возможности Doze, чтобы запускать более легкий набор оптимизаций каждый раз, когда пользователь выключает экран устройства, даже когда пользователь продолжает передвигаться, что обеспечивает более продолжительное время автономной работы.
Производители устройств обычно освобождают критически важные системные службы от Doze. Пользователи также могут исключить определенные приложения из Doze с помощью меню «Настройки». Однако исключение приложений может привести к разрядке аккумулятора устройства. По умолчанию Doze отключен в AOSP; подробности о включении Doze см. в разделе «Интеграция Doze» .
Требования к дозе
Для поддержки Doze требуется, чтобы на устройстве была установлена облачная служба обмена сообщениями, например Firebase Cloud Messaging (FCM) . Внешние триггерные события, такие как облачные сообщения, могут временно разбудить приложения для работы, пока устройство остается в режиме ожидания.
Для поддержки Full Doze также требуется наличие на устройстве значительного детектора движения (SMD) ; однако облегченный режим Doze в Android 7.0 и более поздних версиях не требует SMD. Если Doze включен на устройстве, которое:
- Имеет SMD, происходит полная оптимизация Doze (включая облегченные оптимизации).
- Не имеет SMD, есть только облегченная оптимизация Doze.
Жизненный цикл дозы
Режим ожидания начинается, когда платформа обнаруживает, что устройство находится в режиме ожидания, и заканчивается, когда происходит одно или несколько действий по критерию выхода.
Платформа обнаруживает, что устройство простаивает, когда:
- Устройство стационарное (с использованием SMD).
- Экран устройства выключен на некоторое время.
Режим сна не включается, когда устройство с батарейным питанием подключено к зарядному устройству.
Во время сна
Платформа пытается поддерживать систему в спящем состоянии, периодически возобновляя нормальную работу во время окна обслуживания, а затем возвращая устройство в спящий режим на более длительные повторяющиеся периоды. Во время сна активны следующие ограничения:
- Приложениям не разрешен доступ к сети.
- Вейклокы приложений игнорируются.
- Тревоги отложены. Исключает сигналы будильника и сигналы, установленные с помощью
setAndAllowWhileIdle()
(ограничено 1 раз в 15 минут для каждого приложения в режиме Doze). Это исключение предназначено для приложений (таких как «Календарь»), которые должны отображать уведомления о напоминаниях о событиях. - Сканирование Wi-Fi не выполняется.
- Синхронизация
SyncAdapter
и заданияJobScheduler
отложены до следующего окна обслуживания. - Приложения, получающие SMS- и MMS-сообщения, помещаются во временный белый список, чтобы они могли завершить обработку.
Выход
Платформа выводит устройство из режима Doze, когда обнаруживает:
- Взаимодействие пользователя с устройством
- Движение устройства
- Экран устройства включается
- Неизбежный будильникЧасло-будильник
Уведомления не приводят к выходу устройства из режима Doze.
В Android 7.0 и более поздних версиях Doze расширяется за счет включения упрощенного спящего режима при выключенном экране, прежде чем устройство перейдет в режим ожидания.
Рисунок 1. Режимы сна для нестационарных и стационарных устройств.
Действие | Доза | Легкая доза |
---|---|---|
Курок | Экран выключен, работает от аккумулятора, неподвижен | Экран выключен, работает от аккумулятора (отключен от сети) |
Тайминг | Последовательное увеличение периодов с техническим обслуживанием | Повторяющиеся N-минутные периоды с окнами обслуживания |
Ограничения | Нет доступа к сети, блокировки пробуждения или сканирования GPS/Wi-Fi; сигналы тревоги и задания/синхронизация отложены | Нет доступа к сети; задания/синхронизация отложены, за исключением периодов обслуживания |
Поведение | Получены только высокоприоритетные push-уведомления. | Все полученные сообщения в режиме реального времени (мгновенные сообщения, звонки и т. д.); push-уведомление с высоким приоритетом обеспечивает временный доступ к сети |
Выход | Движение, включение экрана или будильник | Экран включен |
Взаимодействие с режимом ожидания приложения
- Время, проведенное в режиме Doze, не засчитывается в режим ожидания приложения.
- Пока устройство находится в режиме Doze, неактивным приложениям разрешено выполнять обычные операции хотя бы один раз в день.
Интегрируйте дозу
Когда режим Doze включен, устройства, поддерживающие SENSOR_TYPE_SIGNIFICANT_MOTION
, выполняют полную оптимизацию Doze (включая упрощенную оптимизацию); устройства без SMD выполняют только облегченную оптимизацию Doze. Android автоматически выбирает подходящие оптимизации Doze, и настройка поставщика не требуется.
Чтобы включить Doze для устройства:
- Убедитесь, что на устройстве установлена служба облачных сообщений.
- В файле конфигурации наложения устройств
overlay/frameworks/base/core/res/res/values/config.xml
установите дляconfig_enableAutoPowerModes
значениеtrue
:<bool name="config_enableAutoPowerModes">true</bool>
В AOSP для этого параметра по умолчанию установлено значениеfalse
(Doze отключен). - Убедитесь, что предварительно загруженные приложения и службы:
- Используйте рекомендации по оптимизации энергосбережения . Подробности см. в разделе «Тестирование и оптимизация приложений» .
ИЛИ
- Освобождены от режима Doze и App Standby. Подробную информацию см. в разделе Исключение приложений .
- Используйте рекомендации по оптимизации энергосбережения . Подробности см. в разделе «Тестирование и оптимизация приложений» .
- Подтвердите, что необходимые услуги освобождены от Doze.
Советы
- Если возможно, используйте FCM для обмена сообщениями в нисходящем направлении .
- Если ваши пользователи должны увидеть уведомление сразу, используйте сообщение с высоким приоритетом FCM .
- Предоставьте достаточную информацию в исходной полезной нагрузке сообщения (чтобы избежать ненужного последующего доступа к сети).
- Установите критические сигналы тревоги с помощью
setAndAllowWhileIdle()
иsetExactAndAllowWhileIdle()
.
Тестируйте и оптимизируйте приложения
Проверьте все приложения (особенно предварительно загруженные) в режиме ожидания. Подробности см. в разделе «Тестирование с использованием Doze и App Standby» .