Режим ожидания, белый список оптимизации батареи, AlarmManager чаще, чем 9 минут

Я создаю приложение для подключения к устройству BT для сбора данных о здоровье (например, температура тела).

Датчик спит в течение периодического времени и просыпается только в течение ограниченного периода времени для подключения.

Я пытался создать AlarmManager, который запускает Foreground Service с setExactAndAllowWhileIdle() и он работает, как ожидается, в течение периодов, превышающих 9 минут,

но через 9 минут он переходит в режим ожидания и не запускает AlarmManager BroadcastReceiver.

Из документации я не понимаю, если добавление приложения в белый список оптимизации батареи позволит AlarmManager вызывать больше отключений https://developer.android.com/training/monitoring-device-state/doze-standby

Например, задания и синхронизации приложения из белого списка откладываются (на уровне API 23 и ниже), а его обычные тревоги AlarmManager не запускаются

Каковы регулярные тревоги? является setExactAndAllowWhileIdle() регулярные?

Любое разъяснение будет оценено

РЕДАКТИРОВАТЬ:

Я это понимаю setExactAndAllowWhileIdle() вызовет событие в режиме ожидания на периоды более 9 минут, вопрос в том, позволит ли приложение добавлять его в белый список чаще

1 ответ

Решение

Каковы регулярные тревоги? setExactAndAllowWhileIdle() регулярно?

Нет. setExactAndAllowWhileIdle() не регулярно. Обычной тревогой могут быть тревоги AlarmManager, установленные setExact() и setWindow().

но через 9 минут он переходит в режим ожидания и не запускает AlarmManager BroadcastReceiver

Он имеет ограничения на частоту установки будильника.

На основании документации:

Чтобы уменьшить злоупотребления, существуют ограничения на частоту срабатывания этих сигналов тревоги для определенного приложения. При нормальной работе системы она не будет отправлять эти аварийные сигналы чаще, чем примерно каждую минуту (в этот момент отправляется каждый такой ожидающий аварийный сигнал); в режиме ожидания с низким энергопотреблением эта продолжительность может быть значительно больше, например, 15 минут.

Вы можете обратиться к ограничениям Doze, которые говорят:

Стандартные тревоги AlarmManager (включая setExact() и setWindow()) откладываются до следующего окна обслуживания.

  • Если вам нужно установить сигналы тревоги, которые срабатывают в режиме Doze, используйте setAndAllowWhileIdle() или setExactAndAllowWhileIdle().
  • Сигналы тревоги, установленные с помощью setAlarmClock(), продолжают срабатывать в обычном режиме - система выходит из режима Doze незадолго до срабатывания этих сигналов.

Для белого списка:

Приложения, доступные в белом списке, частично освобождены от оптимизации Doze и App Standby. Это не означает, что они имеют полный доступ и могут выполнять задачи в режиме ожидания. Приложение, занесенное в белый список, может использовать сеть и частично блокировать пробуждение во время Doze и App Standby. Тем не менее, другие ограничения, такие как задания различаются, стандартный сигнал тревоги все еще наложены

Примечание: вы должны проверить приемлемые варианты использования для внесения в белый список приложения.

Политики Google Play запрещают приложениям запрашивать прямое освобождение от функций управления питанием в Android 6.0+ (Doze and App Standby), если только не нарушена основная функция приложения.

Другие вопросы по тегам