【问题标题】:WorkManager or AlarmManager for a daily request-then-notification work?WorkManager 或 AlarmManager 用于每日请求然后通知工作?
【发布时间】:2020-03-24 23:18:19
【问题描述】:
这是用例:用户设置具有特定时间的每日通知。在指定时间,发出网络请求以获取一些数据,然后使用检索到的数据显示通知。我不确定是否应该使用 AlarmManager 或 WorkManager 来实现这个用例。
据我了解,AlarmManager 最适合在精确的时间进行调度。但是如果没有网络,作业就会失败,我更喜欢推迟作业以尊重网络约束,而不是执行失败。对于这种类型的受限工作,在保证最终执行的情况下,WorkManager 看起来是最好的解决方案,它使用带有初始延迟的 OneTimeWorkRequest,以便在正确的时间执行。
【问题讨论】:
标签:
android
alarmmanager
android-workmanager
【解决方案1】:
比较 AlarmManager 和 WorkManager,WorkManager 获胜的原因如下:
1) 从 Kitkat 开始的 AlarmManager,可以通过 OS 移动警报以减少设备的唤醒,从而减少电池使用量。
更多详情请查看official documentation。
2) 由于您不打算为通知定义特定时间,我的意思是在这里您不会在特定时间(可能是下午 3:00)使用 Calender,请使用 WorkManager,因为您在 WorkManager 中有 PeriodicWorkRequest。
请注意,您的 PeriodicWorkRequest 不得少于 15 分钟。
检查official documentation 中的 PeriodicWorkRequest
3) WorkManager 现在替换了后台作业、JobScheduler、Firebase JobDispatcher 的所有 API。
4) WorkManager 与协程完美配合
这是我的拙见,如果您有任何疑问,请回复。
快乐编码?