持续占用的部分唤醒锁

部分唤醒锁是 PowerManager API 中的一种机制,它允许开发者在设备显示屏关闭(无论是由于系统超时还是用户按下电源按钮)后保持 CPU 运行。您的应用可以通过调用带有 PARTIAL_WAKE_LOCK 标志的 acquire() 方法,或使用其他获取唤醒锁的 API 来获取部分唤醒锁。如果部分唤醒锁在您的应用于后台运行时(用户看不到您应用的任何部分)长时间保持,则会变为持续占用。这种情况会耗尽设备的电池电量,因为它会阻止设备进入低功耗状态。部分唤醒锁应仅在必要时使用,并在不再需要时立即释放。

如果您的应用存在持续占用的部分唤醒锁,您可以使用本页面中的指南来诊断并修复此问题。

检测问题

您可能并非总是知道您应用的部分唤醒锁是否持续占用。如果您已发布应用,Android Vitals 可以帮助您了解此问题。

Android Vitals

当您的应用出现持续占用的部分唤醒锁时,Android Vitals 可以通过 Play 管理中心向您发出提醒,从而帮助提升您应用的性能。当应用在 24 小时内至少出现一次持续一小时的后台部分唤醒锁时,Android Vitals 会将其报告为持续占用。

显示的电池会话数量是应用所有受衡量用户的汇总数据。如需了解 Google Play 如何收集 Android Vitals 数据,请参阅 Play 管理中心文档。

一旦您了解到您的应用存在持续占用的部分唤醒锁,下一步就是解决该问题。

解决问题

由于唤醒锁会耗尽设备电池,因此如果存在替代方案,则不应使用唤醒锁。有关选择合适的 API 以保持设备唤醒的文档可以帮助您为应用找到最佳解决方案。

如果您确实需要使用唤醒锁,请遵循唤醒锁最佳实践,以确保您的唤醒锁不会损害设备效率。特别是,请确保您获取的每个唤醒锁都已释放,并尽快释放该锁。

在代码中修复问题后,您可以使用本地唤醒锁调试工具来验证您的修复。

另请参阅