Является ли WorkerManager реальным способом реализовать функцию будильника / напоминания в приложении?

Мы замечаем, что AlarmManagerCompat сам по себе не является надежным способом реализовать функцию будильника / напоминания в нашем приложении из-за разного поведения AlarmManager в разных версиях ОС. (Например, режим Doze)

Первоначально мы планируем использовать библиотеку Evernote Android-работа, чтобы помочь нам реализовать функцию будильника / напоминания в нашем приложении.

Однако по ходу дела мы также замечаем, что Google только что выпустил WorkerManager.

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

Мы планируем использовать WorkerManager для реализации функции сигнализации / напоминания.

Мне было интересно, насколько надежен WorkerManager для реализации такой функции? Кто-нибудь пробовал? Мы ориентируемся на API 15 и выше.

17
0
3 713
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

WorkManager не подходит для всего, что должно запускаться в определенное время, поскольку задания, в том числе используемые WorkManager или android-job, не будут запускаться, пока устройство находится в режиме ожидания.

Для точного определения времени вы обязательно должны использовать AlarmManagerCompat и, в частности, setExactAndAllowWhileIdle (), который запускает тревогу точно в указанное время на всех уровнях API.

Поскольку ваш точный будильник может и будет срабатывать, пока устройство находится в спящем режиме, вашему приложению не должно требоваться подключение к сети для публикации уведомления о будильнике / напоминании. В идеале информация должна быть в самом PendingIntent и даже не требовать извлечения из базы данных и т. д.

«Для точного определения времени вы обязательно должны использовать AlarmManagerCompat и, в частности, setExactAndAllowWhileIdle (), который запускает тревогу точно в указанное время на всех уровнях API» - только если устройство не находится в режиме ожидания или ожидания приложения, в этот момент будильник становится неточным (до 11 минут IIRC).

CommonsWare 27.05.2018 02:12

@CommonsWare - первый сигнал тревоги все еще точен, после этого они просто ограничены по скорости, поэтому может показаться, что второй неточный

ianhanniballake 27.05.2018 02:14

А, хорошо, мне придется еще раз протестировать этот сценарий - спасибо!

CommonsWare 27.05.2018 02:25

Благодарим за информацию о WorkManager. Мой опыт работы с AlarmManager таков: он не такой надежный (не стреляйте постоянно). Судя по отзывам сообщества old.reddit.com/r/androiddev/comments/82nbxf/…, у них действительно есть положительный опыт работы с Android Job от Evernote.

Cheok Yan Cheng 27.05.2018 18:40

Android Job использует JobScheduler в более новых версиях Android (это необходимо из-за фоновых ограничений). Поскольку JobScheduler никогда не срабатывает, пока устройство находится в дремоте, он не подходит для чего-то, что должно срабатывать во время дремоты (то есть чего-либо с точным временем).

ianhanniballake 27.05.2018 19:03
AlarmManager не является пользователем внутри WorkManager?
Pavel Poley 16.12.2020 14:49

@PavelPoley - хотя WorkManager использует аварийные сигналы на устройствах до API 23, когда JobScheduler недоступен / надежен, он не использует точные аварийные сигналы или аварийные сигналы, которые срабатывают в режиме ожидания - оба из которых необходимы для чего-то, что должно срабатывать в определенное время .

ianhanniballake 16.12.2020 19:10

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