我在应用程序中使用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秒钟
  允许该应用获取其他唤醒锁,以便在其中
  完成工作。

07-27 19:21