WorkerManager是在应用程序中实现警报/提醒功能的可靠方式吗?

21
我们注意到单独使用 AlarmManagerCompat 在应用中实现闹钟/提醒功能并不可靠,因为在不同的操作系统版本中 AlarmManager 的行为有所不同(例如Doze模式)。
最初,我们计划使用 Evernote 的 android-job 库来帮助我们在应用中实现闹钟/提醒功能。
然而,在此过程中,我们还注意到 Google 刚刚发布了 WorkerManager
到目前为止,当我们在应用退出后运行一些一次性后台作业(几乎立即完成,并且受到网络连接的限制)时,WorkerManager 对我们非常有效。
我们计划使用 WorkerManager 来实现闹钟/提醒功能。
我想知道,使用 WorkerManager 实现此功能的可靠性如何? 有人试过吗? 我们的目标是API 15及以上。
1个回答

19

对于需要在特定时间触发的任务,包括那些由WorkManager或android-job使用的任务,WorkManager是不适合的,因为它们在设备休眠时不会触发。

对于精确的定时,您应该绝对使用AlarmManagerCompat,尤其是setExactAndAllowWhileIdle(),它可以在所有API级别上在指定时间精确触发闹钟。

由于您精确定时的闹钟可能会在设备休眠时触发,因此您的应用程序不应要求网络连接以发布您的闹钟/提醒通知。理想情况下,信息应该在PendingIntent本身中,并且甚至不需要任何数据库获取等操作。


1
为了精确计时,您应该绝对使用AlarmManagerCompat,并具体使用setExactAndAllowWhileIdle()方法,在所有API级别上在指定的时间准确触发警报。但是请注意,如果设备处于Doze模式或应用程序待机状态,则该警报变得不太准确(最多相差11分钟)。 - CommonsWare
2
@CommonsWare - 第一个闹钟仍然是精确的,只是在之后有速率限制,因此第二个闹钟可能看起来不精确。 - ianhanniballake
1
感谢您对WorkManager的输入。我个人使用AlarmManager的经验是,它并不太可靠(不能始终触发)。根据社区的反馈(https://old.reddit.com/r/androiddev/comments/82nbxf/android_alarms_notification_frustrated/),他们对来自Evernote的Android Job有积极的体验。 - Cheok Yan Cheng
2
Android Job在较新版本的Android上使用JobScheduler(由于后台限制,必须这样做)。由于设备进入待机模式时JobScheduler永远不会触发,因此对于需要在待机期间触发的内容(即任何具有精确时间的内容)不适用。 - ianhanniballake
1
@PavelPoley - 虽然 WorkManager 在 API 23 之前的设备上使用闹钟,当 JobScheduler 不可用或不可靠时,但它不使用精确闹钟或在空闲模式下触发的闹钟 - 这两者都是需要在特定时间触发的东西所必需的。 - ianhanniballake
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接