当设备连接到电源时,Android 是否对 WakeLock 有不同的行为?

Does Android have a different behavior for WakeLock when the device is connected to power source?

提供一些背景信息:我正在尝试测量 Android 应用中最佳实践的能耗。 我重构了一个使用 WakeLock 来保持屏幕开启的应用程序,我使用标志 FLAG_KEEP_SCREEN_ON 代替。 令人惊讶的是,我只能在能源消耗方面取得非常小的改善。

我原以为 CPU 能够进入低功耗状态,这样会消耗更少的能量。

在这些条件下 CPU 电源管理是否有不同的行为,或者使用此 FLAG 预计不会产生合理的效果?

我正在使用必须连接电源的设备 ODROID-XU 进行测量。 Android 版本是 4.2.2 - API 级别 17.

您没有发现太大差异的原因是

WakeLock 防止设备在屏幕关闭时进入休眠状态,而当您使用 FLAG_KEEP_SCREEN_ON 时,显示器也会与应用程序一起使用电源,相信我,这需要合理的电量。

所以结果几乎相同,而使用 FLAG_KEEP_SCREEN_ON 可能会导致糟糕的用户体验。

对此进行了一些研究并根据之前对该问题的评论,我找到了一个对我来说很清楚的解释。

以下文章解释了应如何使用 WakeLock 以确保在不再需要时正确释放它: http://vliux.me/android/android-power-consumption-and-wakelock/

作者解释说,唤醒锁的使用不是一件容易的事,很容易出现错误,从而耗尽电池电量。 当我们使用标志 FLAG_KEEP_SCREEN_ON 时,系统 (WindowManager) 会为我们处理锁。 因此,我们确保 Wakelock 将被正确释放。

此外,如@Dodge所述,使用标志FLAG_KEEP_SCREEN_ON不需要特殊许可。

以下答案也支持这一点: .

注意:有一个针对不正确的唤醒锁使用的 lint 检查,建议使用 FLAG_KEEP_SCREEN_ON:在 lint 文档中查找 "Wakelock":http://tools.android.com/tips/lint-checks.