WakefulBroadcastReceiver (или эквивалентный) необходим с AlarmManager - PullRequest
0 голосов
/ 25 мая 2018

Я использую setExactAndAllowWhileIdle с AlarmManager в API 25 и выше.Кроме того, я использую «стандартный» BroadcastReceiver для получения PendingIntent, вызванного тревогой.Более того, WakefulBroadcastReceiver (который, как представляется, больше предназначен для сервисов, чем для аварийных сигналов) устарел в API 26.

  1. Был ли этот класс заменен в API 26?
  2. Нужно лииспользовать эквивалентный класс (так как он устарел) с AlarmManager или использование стандартного BroadcastReceiver достаточно для пробуждения устройства при использовании Alarm с setExactAndAllowWhileIdle?
  3. Наконец, нужно ли добавить разрешение WAKE_LOCK в мойМанифест при использовании с AlarmManager?

Спасибо.J

1 Ответ

0 голосов
/ 26 мая 2018

WakefuleBroadcastReceiver изначально использовался для обработки операций, которые необходимо было выполнить из-за пробуждения (по тревоге), когда операции могли занять некоторое время, например, для передачи по сети.Для этого использовался WakefulBroadcastReceiver, чтобы Service мог быть надежно запущен и фактически работал до того, как устройство вернулось в состояние низкого энергопотребления.Это устарело, поскольку такой же тип поведения может быть реализован с использованием других средств, таких как службы переднего плана, JobScheduler или push-уведомления с высоким приоритетом.Что касается пробуждения, все зависит от того, что вам нужно делать, когда срабатывает ваша сигнализация.Эта статья может быть полезна для понимания AlarmManager: http://po.st/7UpipA

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

Если вы согласны с использованием программного обеспечения выпуска альфа-уровня, новый WorkManager - это то, что нужно, поскольку он обрабатывает множество зависимостей версий для вас на основеустройство, на котором работает ваш код.Он будет автоматически использовать JobScheduler, AlarmManager и т. Д. В зависимости от того, что вам нужно и на какой версии ОС вы работаете.

Если вы не хотите использовать WorkManager, я предлагаю покопатьсяв JobScheduler, чтобы увидеть, будет ли оно соответствовать вашим потребностям.Возможно, вам придется выполнить некоторую проверку уровня API и использовать код AlarmManager w / WakefulBroadcastReceiver на некоторых платформах и JobScheduler на других.

...