唤醒锁: 检测 Android* 应用中的 No-Sleep(无法进入睡眠)问题

本文探讨了Android应用中不当使用唤醒锁导致的No-Sleep问题,详细介绍了唤醒锁的种类、如何查找此类漏洞,并提供了解决方案。通过adb和BetterBatteryStats等工具,开发者可以检测和优化应用,减少电池不必要的损耗。
摘要由CSDN通过智能技术生成

作者:philippe-michel

摘要

如果 Android* 应用使用唤醒锁不当,将会显著增加电池耗电量。 在本文中,我们将介绍一些提示和技巧,帮助您了解如何确认与误用唤醒锁有关的 No Sleep 漏洞。

1. 介绍
2. 唤醒锁
2.1. 唤醒锁简介
2.2. Android 用户唤醒锁
2.3. Android 内核唤醒锁
2.4. No-Sleep 漏洞
3. 找出 No Sleep 漏洞
3.1. 使用 adb
3.2. 使用 BetterBatteryStats 应用
4. 测试案例
5. 结论
6. 参考文献

1. 介绍

限制电池耗电量对智能手机非常有必要。 为了获得最大的自主性,Android 的操作系统设计可在检测到系统上无用户活动时进入睡眠模式。 一些应用需要设备保持开启状态 — 即使长时间无用户操作。 比如,看视频、听音乐、使用 GPS 以及玩游戏。 Android 可为操作系统或应用提供了这样的机制,以确保设备保持唤醒状态。 该机制称为唤醒锁。 如欲了解其他信息,请阅读 Christopher Bird 的文章: “适用于 Android 的唤醒锁”。

这种机制的出现让管理组件活动的责任落到应用开发人员的身上。 如果使用错误,应用可能会大量消耗电池电量 — 即使应用并未在前台运行。

2. 唤醒锁

2.1.唤醒锁简介

唤醒锁是一种控制主机设备电源状态的软件机制。 操作系统可导出明确的电源管理句柄和 API,以指定某个组件何时需要保持开启或唤醒状态,直至其从任务中被明确释放。

唤醒锁机制可在两个层面上实施: 用户和内核。 下图展示了 Android 唤醒锁实施的内部设计。 用户唤醒锁可被高层面的操作系统服务或应用采用,并通过电源管理服务提供。 它支持应用控制设备的电源状态。 内核唤醒锁由操作系统内核或驱动程序控制。 用户唤醒锁被映射至内核唤醒锁。 任何活动的内核层面唤醒锁都可阻止系统在 ACPI S3 状态挂起(在 RAM 挂起)— 它是移动设备最节能的状态。

2.2. Android 用户唤醒锁

Android 架构通过 PowerManager 导出唤醒锁机制。唤醒锁可划分为并识别四种用户唤醒锁:

标记值 CPU 屏幕 键盘

PARTIAL_WAKE_LOCK

开启

关闭

关闭

SCREEN_DIM_WAKE_LOCK

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值