android - AlarmManager 是否需要 WakefulBroadcastReceiver (或等效的)
问题描述
我在 API 25 及更高版本中使用 setExactAndAllowWhileIdle 和 AlarmManager。我还使用“标准”广播接收器来接收警报触发的 PendingIntent。此外,API 26 中已弃用 WakefulBroadcastReceiver(似乎更多地用于服务而不是警报)。
- 这个类在 API 26 中被替换了吗?
- 在使用具有 setExactAndAllowWhileIdle 的警报时,我是否需要使用具有等效类(因为它已被弃用)和 AlarmManager 或使用标准 BroadcastReceiver 足以唤醒设备?
- 最后,当与 AlarmManager 一起使用时,我是否需要向我的 Manifest 添加 WAKE_LOCK 权限?
解决方案
WakefuleBroadcastReceiver
最初用于处理由于唤醒(通过警报)而需要执行的操作,其中操作可能需要一段时间,例如进行网络传输。为了做到这一点,WakefulBroadcastReceiver
使用了 aService
可以可靠地启动并在设备返回低功耗状态之前实际执行。它已被弃用,因为可以使用其他工具来完成相同类型的行为,例如前台服务JobScheduler
或高优先级推送通知。就唤醒锁而言,这完全取决于您在闹钟响起时需要做什么。这篇文章可能有助于理解AlarmManager
: http: //po.st/7UpipA
在 API 23 中引入的打瞌睡模式下,警报的功能逐渐减弱。从 Oreo (API 26) 开始,后台操作受到更严格的限制,以帮助延长电池寿命。
如果您对使用 alpha 级别的发布软件感到满意,那么新WorkManager
的方法就是要走的路,因为它会根据您的代码运行的设备为您处理很多版本依赖项。它将根据您的需要和您正在执行的操作系统版本自动使用JobScheduler
,等。AlarmManager
如果您不想使用WorkManager
,我建议您深入JobScheduler
了解它是否能满足您的需求。您可能需要进行一些 API 级别检查,并让您的代码AlarmManager
在WakefulBroadcastReceiver
某些平台和JobScheduler
其他平台上使用。
推荐阅读
- r - 在使用 Knitr 的 R 中,如何获得在循环中创建的绘图图表以进行打印?
- linux - Unix命令打印第一句
- time - 运行 ansible-playbook 时如何测量和显示任务所花费的时间?
- css - React-MaterialUI:在App Bar - > Tabs - > Tab中将单个选项卡水平对齐到右侧和其他到左侧
- android - 状态栏下的应用栏标题颤动
- html - 如何水平滚动行项目
- cypress - 柏树中的 POST(已取消)是什么意思?
- php - 每次更改 PHP 设置时,我都必须重新启动整个 EC2 服务器
- reactjs - useLocation 无法识别我发送的密钥,React
- node.js - Neo4j JavaScript 驱动程序 - 订阅更改