我正在使用应用程序中的AlarmManager
来设置在特定日期和时间设置的闹钟。现在最近很少有我们应用程序的用户抱怨这些警报没有弹出。此外,在Android O指南中,提到应用程序不应运行任何后台服务,而应切换到Firebase
JobDispatcher
。我有以下2个问题
- 在我们的应用程序中,除了在指定的时间和日期向用户显示通知外,我们不执行任何后台任务。即使在这种情况下,我们也应该切换到
Firebase
Jobdispatcher
? - 如果我们确实需要切换到
JobDispatcher
,如何将作业设置为在确切的特定日期和时间运行?
因为您没有执行任何后台任务,例如网络请求或长时间运行的 CPU 操作,所以我认为您应该继续使用Alarm Manager
.
现在最近很少有我们应用程序的用户抱怨这些警报没有弹出。
这是因为当打瞌睡模式触发时,不能保证您的警报会被触发(请参阅此处)。
您可以做的是根据您对 API 级别>= 23 的要求,使用 AlarmManager 类中的setAndAllowWhileIdle()
或setExactAndAllowWhileIdle()
方法。
根据文档,这些适用于通知目的。setAndAllowWhileIdle()
文档:
像
set(int, long, PendingIntent)
一样,但此警报将被允许 即使系统处于低功耗空闲模式,也能执行。这种类型的 警报只能用于实际需要的情况 警报在空闲时响起 - 一个合理的例子是 对于应发出声音的日历通知,以便用户 意识到这一点。当警报被调度时,应用程序也会被添加 到系统的临时白名单大约 10 秒 允许该应用程序获取更多唤醒锁,以便在其中 完成其工作。