为了给出一些上下文:我正在尝试衡量Android应用程序中最佳实践的能耗。我重构了一个使用WakeLock来保持屏幕打开的应用程序,我使用了标志FLAG_KEEP_SCREEN_ON
。令人惊讶的是,我只能在能源消耗方面有一个非常小的改善。
我希望CPU能够进入低功耗状态,这样会消耗更少的能量。
在这些情况下,CPU电源管理是否有不同的行为,或者使用此FLAG预计不会产生合理的效果?
我正在使用ODROID-XU设备进行测量,该设备必须连接到电源。安卓版本是4.2.2-API 17级。
您没有发现太大差异的原因是
当设备的屏幕关闭时,WakeLock
可以防止设备进入睡眠状态,而当你使用FLAG_KEEP_SCREEN_ON
时,显示器也在使用应用程序的电源,相信我,它需要合理的电量。
因此,结果几乎相同,而使用FLAG_KEEP_SCREEN_ON
可能会导致糟糕的用户体验。
在对此进行了一些研究并基于之前对这个问题的评论之后,我找到了一个我很清楚的解释。
以下文章解释了WakeLock应如何使用,以确保在不再需要时正确释放:http://vliux.me/android/android-power-consumption-and-wakelock/
作者解释说,使用Wakelock不是一项容易的任务,而且容易出现错误,从而耗尽电池电量。当我们使用标志FLAG_KEEP_SCREEN_ON
时,系统(WindowManager
)为我们处理锁。因此,我们确保Wakelock将被适当释放。
此外,正如@Dodge所提到的,使用标志FLAG_KEEP_SCREEN_ON
不需要特殊许可。
以下答案也支持这一点:https://stackoverflow.com/a/4376967/1228682。
注意:有一个关于不正确唤醒锁使用的lint检查,建议使用FLAG_KEEP_SCREEN_ON
:在lint文档中查找"Wakelock":http://tools.android.com/tips/lint-checks.