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