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

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

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

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

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

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

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

Какие бывают обычные будильники? setExactAndAllowWhileIdle() регулярно?

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

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

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


person wojciech_maciejewski    schedule 18.07.2018    source источник
comment
Неа! setExactAndAllowWhileIdle - это крайний флаг, когда вам нужно активировать тревогу независимо от того, что происходит, но он ограничен минимальным интервалом в 9 минут.   -  person Tarun Kumar    schedule 18.07.2018
comment
Дозировка - это общесистемное понятие. Добавление приложения в так называемый белый список не предотвращает дремоту. В этом заявлении говорится, что обычные сигналы, такие как set () и так называемый setExact (), не будут срабатывать во время дремоты, но методы ожидания, такие как setExactAndAllowWhileIdle, будут срабатывать во время окон обслуживания дремоты.   -  person Elletlar    schedule 18.07.2018
comment
Привет, спасибо за комментарии, я понимаю концепцию дремоты и включения сигналов тревоги, вопрос в том, что добавление в белый список позволит мне вызывать сигналы тревоги чаще, чем 9 минут   -  person wojciech_maciejewski    schedule 18.07.2018
comment
Никакие белые списки этого не сделают, но setAlarmClock может срабатывать часто.   -  person Elletlar    schedule 18.07.2018
comment
AlarmClock или запускать службу переднего плана в течение всего времени, а не только измерять время   -  person wojciech_maciejewski    schedule 18.07.2018
comment
Да, за исключением некоторых устройств Android 6, где службы переднего плана не работают, если они не находятся в отдельном процессе.   -  person Elletlar    schedule 18.07.2018
comment
@Elletlar, значит, вы говорите, что setAlarmClock более надежен, чем setExactAndAllowWhileIdle?   -  person Mitulát báti    schedule 13.04.2020
comment
@ Mitulátbáti API-интерфейсы AlarmManager известны тем, что имеют разное поведение в разных версиях Android. API AlarmClock раньше был освобожден от «дремоты», но текущая документация намекает, что это уже не так. Вы потратите свое время, пытаясь найти конкретное руководство, потому что Google намеренно расплывчато говорит о «дремоте». Но чтобы ответить, я не верю, что существует какой-либо API-интерфейс AlarmManger, который задокументирован для срабатывания чаще, чем setAlarmClock.   -  person Elletlar    schedule 15.04.2020
comment
Присутствуют документы для setAlarmClock: этим сигналам будет разрешено срабатывать, даже если система находится в режиме ожидания с низким энергопотреблением (он же дремота). Система также может выполнить некоторую подготовительную работу, когда увидит, что такой сигнал тревоги приближается, чтобы уменьшить объем фоновой работы, которая может произойти, если это приведет к полному пробуждению устройства - это необходимо, чтобы избежать таких ситуаций, как большое количество устройств, у которых будильник установлен в одно и то же время утром, все просыпаются в это время и внезапно заваливают сеть незавершенной фоновой работой. Таким образом, эти типы сигналов тревоги могут быть очень дорогими при использовании батареи ...   -  person Elletlar    schedule 15.04.2020


Ответы (1)


Какие бывают обычные будильники? является ли setExactAndAllowWhileIdle () регулярным?

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

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

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

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

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

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

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

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

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

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

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

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

person Sagar    schedule 18.07.2018
comment
Хороший ответ. Еще одна вещь, которую было бы неплохо включить, - каковы все преимущества того, что пользователь вносит приложение в белый список? - person Elletlar; 18.07.2018
comment
вероятно, создаст постоянно работающую службу переднего плана и просто запускает соединение BT в периоды, запускаемые из AlarmManager - person wojciech_maciejewski; 18.07.2018
comment
@wojciech_maciejewski Я тестировал Pixel. Я обнаружил, что через 4 часа обслуживание переднего плана было прекращено. Кажется, они оптимизированы для интенсивной работы процессора. Не забудьте проверить этот случай, если он так важен - person Sagar; 18.07.2018
comment
хм, это не очень хорошая информация для меня, я всегда могу предложить пользователю держать устройство под напряжением: P Спасибо за подсказку - person wojciech_maciejewski; 18.07.2018