当设备连接到电源时,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

Android设备无法连接到本地主机中的mysql [关闭]

如何从android设备连接到sql server数据库

当后端连接到 wordpress 时如何向设备发送通知?

设备在Android中连接到WiFi时如何获取蜂窝网络的IP地址