Чтобы увеличить срок службы батареи устройства, 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 минут для приложения в дремоте). Это исключение предназначено для приложений (таких как Календарь), которые должны отображать напоминания о событиях. - Сканирование Wi-Fi не выполняется.
-
SyncAdapter
и заданияJobScheduler
отложены до следующего периода обслуживания. - Приложения, получающие SMS- и MMS-сообщения, помещаются во временный белый список, чтобы они могли завершить свою обработку.
Выход
Платформа выходит из режима Doze, когда обнаруживает:
- Взаимодействие пользователя с устройством
- Движение устройства
- Экран устройства включается
- Неизбежный будильник
Уведомления не приводят к выходу устройства из режима Doze.
Android 7.0 и более поздние версии расширяют возможности Doze, позволяя включать облегченный спящий режим при выключенном экране, прежде чем устройство будет бездействовать.
Действие | Дремать | Легкая доза |
---|---|---|
Курок | Экран выключен, на батарее, в стационарном режиме | Экран выключен, питание от батареи (от сети) |
Сроки | Последовательно увеличивающиеся периоды обслуживания | Повторяющиеся N-минутные периоды с периодами обслуживания |
Ограничения | Нет доступа к сети, блокировки пробуждения или сканирования GPS/Wi-Fi; будильники и задания/синхронизация отложены | Нет доступа к сети; задания/синхронизация отложены, за исключением периодов обслуживания |
Поведение | Получены только высокоприоритетные push-уведомления | Все полученные сообщения в режиме реального времени (мгновенные сообщения, звонки и т. д.); высокоприоритетное push-уведомление обеспечивает временный доступ к сети |
Выход | Движение, включенный экран или будильник | Экран включен |
Взаимодействие с App Standby
- Время, проведенное в режиме ожидания, не учитывается в режиме ожидания приложения.
- Пока устройство находится в режиме ожидания, бездействующие приложения могут выполнять обычные операции не реже одного раза в день.
Интеграция 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 и App Standby. Подробнее см. в разделе Исключение приложений .
- Используйте рекомендации по оптимизации энергосбережения . Подробнее см. в разделе Тестирование и оптимизация приложений .
- Подтвердите, что необходимые службы освобождены от Doze.
Советы
- Если возможно, используйте FCM для нисходящего обмена сообщениями .
- Если ваши пользователи должны видеть уведомление немедленно, используйте высокоприоритетное сообщение FCM .
- Предоставьте достаточную информацию в исходной полезной нагрузке сообщения (чтобы избежать ненужного последующего доступа к сети).
- Установите критические сигналы с помощью
setAndAllowWhileIdle()
иsetExactAndAllowWhileIdle()
.
Тестирование и оптимизация приложений
Протестируйте все приложения (особенно предварительно загруженные) в режиме ожидания. Подробнее см. в разделе Тестирование с помощью Doze и App Standby .