AlarmManager是否需要WakefulBroadcastReceiver(或等效)

时间:2018-05-25 18:10:00

标签: android alarmmanager android-alarms

我在API 25及更高版本中使用setExactAndAllowWhileIdle和AlarmManager。我还使用“标准”BroadcastReceiver来接收由警报触发的PendingIntent。此外,在API 26中已经弃用了WakefulBroadcastReceiver(它似乎被设想为服务而不是警报)。

  1. 此类是否已在API 26中替换?
  2. 我是否需要使用AlarmManager或使用标准BroadcastReceiver来使用等效类(因为它已被弃用),以便在使用带有setExactAndAllowWhileIdle的警报时唤醒设备?
  3. 最后,当与AlarmManager一起使用时,是否需要为我的清单添加WAKE_LOCK权限?
  4. 谢谢。 Ĵ

1 个答案:

答案 0 :(得分:1)

WakefuleBroadcastReceiver最初用于处理由于唤醒(通过警报)而需要执行的操作,其中操作可能需要一段时间,例如进行网络传输。为了做到这一点,使用了WakefulBroadcastReceiver,因此Service可以可靠地启动,并且在设备恢复到低功耗状态之前实际执行。它已被弃用,因为可以使用其他工具完成相同类型的行为,例如前台服务,JobScheduler或高优先级推送通知。对于唤醒锁定,它取决于您的警报触发时需要做什么。本文可能有助于理解AlarmManagerhttp://po.st/7UpipA

在处于API 23中的Doze模式下,警报的功能逐渐减弱。从Oreo(API 26)开始,后台操作受到更严格的限制,以帮助延长电池寿命。

如果您可以使用alpha级别发布软件,则可以使用新的WorkManager,因为它会根据运行代码的设备为您处理许多版本依赖项。它将自动使用JobSchedulerAlarmManager等,具体取决于您的需求以及您正在执行的操作系统版本。

如果您不想使用WorkManager,我建议您深入JobScheduler,看看它是否符合您的需求。您可能需要进行一些API级别检查,并在某些平台上使用AlarmManager w / WakefulBroadcastReceiver,而在其他平台上使用JobScheduler