【问题标题】:Is it possible to create Alarm app that runs on post Oreo devices是否可以创建在奥利奥后设备上运行的警报应用程序
【发布时间】:2020-09-25 12:33:10
【问题描述】:

过去我们有 Alarm ManagerIntent Services隐式广播接收器,即使应用程序不在后台也可以运行。

但是今天(发布奥利奥)我们有Work ManagerJob Schedulers。当应用程序不在后台时,他们会为我们做这些事情,但他们不保证确切的执行时间。

所以今天如果我需要创建一个应用程序,用户可以在其中设置警报,将在5:00 am 27 September 2021 触发似乎是不可能的。 (出于明显的原因跳过 2020 年 ;))

有没有人尝试在 oreo 操作系统后创建警报应用程序,我知道 Gmail 和其他系统会这样做,但据我所知,他们有执行此操作的特殊权限,而其他应用程序不允许这样做。

【问题讨论】:

  • 你可以在 oreo 或更高版本中使用警报管理器创建警报,我暂时没有问题。
  • Gmail 有特殊权限?怎么样?
  • @isthemartin : 那么为什么要使用 Job Scheduler,如果我可以使用警报管理器在准确的时间执行某些任务

标签: android alarmmanager android-jobscheduler android-intentservice


【解决方案1】:

AlarmManager 仍然适用于现代 Android 设备。 API 文档有一个关于严格调度保证的说明:

注意:从 API 19 (Build.VERSION_CODES.KITKAT) 开始,警报传递不准确:操作系统将切换警报以最大程度地减少唤醒和电池使用。有新的 API 来支持需要严格交付保证的应用程序;见setWindow(int, long, long, android.app.PendingIntent)setExact(int, long, android.app.PendingIntent)。 targetSdkVersion 早于 API 19 的应用程序将继续看到以前的行为,即所有警报都在请求时准确传递。

因此,如果您想设置准确的唤醒时间,您可以在 API 级别 19 及更高级别上使用 setExact()

【讨论】:

  • 非常感谢您对此的解释。所以 Alarm manager 只能每 15 分钟调用一次,但是 Job Scheduler 和 Alarm Manager 之间的区别在于,Alarm 保证它会在特定时间调用。
  • 另外,你可以setRepeating报警管理器,我认为JobScheduler用于队列中的许多任务。
猜你喜欢
  • 2018-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多