当设备连接到电源时,Android 是不是有不同的 WakeLock 行为?
Posted
技术标签:
【中文标题】当设备连接到电源时,Android 是不是有不同的 WakeLock 行为?【英文标题】:Does Android have a different behavior for WakeLock when the device is connected to power source?当设备连接到电源时,Android 是否有不同的 WakeLock 行为? 【发布时间】:2016-07-28 11:29:15 【问题描述】:提供一些背景信息:我正在尝试衡量 android 应用中最佳做法的能耗。
我已经重构了一个使用 WakeLock 来保持屏幕开启的应用程序,我改用标志 FLAG_KEEP_SCREEN_ON
。
令人惊讶的是,我只能在能源消耗方面有很小的改善。
我希望 CPU 能够进入低功耗状态,这样会消耗更少的能量。
在这些情况下 CPU 电源管理是否有不同的行为,或者使用此 FLAG 预计不会产生合理的效果?
我正在使用必须连接到电源的设备 ODROID-XU 进行测量。 Android 版本为 4.2.2 - API 级别 17。
【问题讨论】:
afaik 活动中FLAG_KEEP_SCREEN_ON
标志的唯一好处是您不需要唤醒锁权限。
这里是文档中的相关说明:SCREEN_BRIGHT_WAKE_LOCK 和 SCREEN_DIM_WAKE_LOCK
另外:我确定屏幕一亮,CPU 就亮了。所以这无助于花费更少的精力,而只是为了避免唤醒锁定权限
【参考方案1】:
你没有发现太大差异的原因是
WakeLock
可以防止设备在设备屏幕关闭时进入睡眠状态,而当您使用FLAG_KEEP_SCREEN_ON
时,显示器也会与应用程序一起使用电源,相信我会消耗合理的电量。
所以结果几乎相同,而使用FLAG_KEEP_SCREEN_ON
可能会导致用户体验不佳。
【讨论】:
【参考方案2】:在对此问题进行了一些研究并基于以前的cmets之后,我找到了一个我很清楚的解释。
以下文章解释了应如何使用 WakeLock 以确保在不再需要时正确释放它: http://vliux.me/android/android-power-consumption-and-wakelock/
作者解释说,使用唤醒锁并不是一件容易的事,而且容易出现可能耗尽电池的错误。
当我们使用标志 FLAG_KEEP_SCREEN_ON
时,系统 (WindowManager
) 会为我们处理锁。
因此,我们确保唤醒锁将被正确释放。
另外,正如@Dodge 所说,使用标志FLAG_KEEP_SCREEN_ON
不需要特殊权限。
以下答案也支持这一点:https://***.com/a/4376967/1228682。
注意:有一个 lint 检查不正确的唤醒锁使用,建议使用 FLAG_KEEP_SCREEN_ON
:在 lint 文档中找到“Wakelock”:http://tools.android.com/tips/lint-checks。
【讨论】:
以上是关于当设备连接到电源时,Android 是不是有不同的 WakeLock 行为?的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 如何检测电源是不是连接到 iDevice 广告正在充电
当我的活动正在运行并且设备已连接到充电器时,防止设备锁定 android