我在API 25及更高版本中使用setExactAndAllowWhileIdle和AlarmManager。我还使用“标准”BroadcastReceiver来接收由警报触发的PendingIntent。此外,在API 26中已经弃用了WakefulBroadcastReceiver(它似乎被设想为服务而不是警报)。
谢谢。 Ĵ
答案 0 :(得分:1)
WakefuleBroadcastReceiver
最初用于处理由于唤醒(通过警报)而需要执行的操作,其中操作可能需要一段时间,例如进行网络传输。为了做到这一点,使用了WakefulBroadcastReceiver
,因此Service
可以可靠地启动,并且在设备恢复到低功耗状态之前实际执行。它已被弃用,因为可以使用其他工具完成相同类型的行为,例如前台服务,JobScheduler
或高优先级推送通知。对于唤醒锁定,它取决于您的警报触发时需要做什么。本文可能有助于理解AlarmManager
:http://po.st/7UpipA
在处于API 23中的Doze模式下,警报的功能逐渐减弱。从Oreo(API 26)开始,后台操作受到更严格的限制,以帮助延长电池寿命。
如果您可以使用alpha级别发布软件,则可以使用新的WorkManager
,因为它会根据运行代码的设备为您处理许多版本依赖项。它将自动使用JobScheduler
,AlarmManager
等,具体取决于您的需求以及您正在执行的操作系统版本。
如果您不想使用WorkManager
,我建议您深入JobScheduler
,看看它是否符合您的需求。您可能需要进行一些API级别检查,并在某些平台上使用AlarmManager
w / WakefulBroadcastReceiver
,而在其他平台上使用JobScheduler
。