部分唤醒锁定是 PowerManager API 中的一种机制,可让开发者在设备的显示屏关闭后(无论是由于系统超时还是用户按下电源按钮)继续保持 CPU 运行。您的应用会通过调用带有 PARTIAL_WAKE_LOCK 标志的 acquire(),或者使用可获取唤醒锁定的其他 API 来获取部分唤醒锁定。过度使用部分唤醒锁定会耗尽设备的电池电量,因为这会阻止设备进入低功耗状态。只有在必要时才应使用部分唤醒锁定,并在不再需要时立即释放。
如果您的应用过度使用部分唤醒锁定,您可以使用本页中的指南来诊断和解决问题。
检测问题
Android Vitals 可帮助您了解应用何时过度使用部分唤醒锁定。
Android Vitals
当您的应用过度使用部分唤醒锁定时,Android Vitals 可通过 Play 管理中心提醒您,从而帮助您改进应用性能。
如果所有部分唤醒锁定的总运行时间在 24 小时内达到或超过 2 小时,Android Vitals 会报告部分唤醒锁定使用情况为过高。只有当应用在后台或运行前台服务时持有唤醒锁定,Android Vitals 才会跟踪唤醒锁定时长。目前,Android Vitals 会将由 audio、location 和 JobScheduler 用户启动的 API 创建的唤醒锁定从唤醒锁定计算中排除。
Android Vitals“部分唤醒锁定操作过多”信息中心会细分与您的应用相关联的非豁免唤醒锁定名称,并显示受影响的会话和持续时间。
如果所有设备在 28 天内有超过 5% 的应用会话出现过多的局部唤醒锁定,则可能会影响应用在 Play 上的曝光度。
当您发现应用存在过多的部分唤醒锁定时,下一步就是解决问题。
解决问题
由于唤醒锁定会消耗设备电池电量,因此如果有替代方案,请勿使用唤醒锁定。选择合适的 API 以保持设备唤醒状态文档可帮助您为应用找到最佳解决方案。
如果确实需要使用唤醒锁定,请遵循唤醒锁定最佳实践,确保唤醒锁定不会影响设备效率。尤其需要注意的是,务必确保所有已获取的唤醒锁定均已释放,且释放操作要越快越好。
即使您未明确获取唤醒锁定,您的应用也可能正在使用唤醒锁定。如果您发现归因于应用的唤醒锁定是您不认识的,识别由其他 API 创建的唤醒锁定可以帮助您识别可能创建了这些唤醒锁的 API。
修复代码中的问题后,您可以使用本地唤醒锁定调试工具验证修复效果。
另请参阅
为你推荐
- 注意:当 JavaScript 处于关闭状态时,系统会显示链接文字
- 冻结的帧
- 在持续集成环境中运行基准测试
- 在不使用 Macrobenchmark 的情况下创建和衡量基准配置文件