延迟暂停、早期恢复和唤醒锁。请解释

Posted

技术标签:

【中文标题】延迟暂停、早期恢复和唤醒锁。请解释【英文标题】:late suspend, early resume and wakelocks. please explain 【发布时间】:2012-10-04 09:30:53 【问题描述】:

什么是功能,为什么要在 android 内核中引入? 通过引入这一点,电源管理是否以任何方式变得高效? 这些是我在研究 Android 内核中的 PM 模块时遇到的几个问题。

【问题讨论】:

【参考方案1】:

Android 分为 2 层

应用 Linux 内核

所有对硬件、CPU、内存的低级访问都是由 linux 内核完成的。内核反过来提供系统调用和驱动程序作为应用程序与硬件对话的机制。

现在,对于任何智能手机来说,电池寿命都至关重要,因此需要进行电源管理。想法是让设备在活动和待机情况下消耗尽可能少的功率。这将意味着更长的电池寿命。

唤醒锁是一种机制,应用程序可以通过该机制请求系统处于高功率状态。不同的唤醒锁使系统的不同部分保持打开状态,例如屏幕、CPU、键盘等。当 Android 必须进入低功耗状态时,它会检查是否采取了任何唤醒锁。如果没有,则进入深度睡眠状态。因此,应用程序持有唤醒锁的时间过长是不好的。

Android 控制应该打开哪个设备。特定设备驱动程序将根据是否需要打开/关闭。

建议您阅读this link 以获取有关此的重要信息!

【讨论】:

感谢您的回复。不过,我还有几个问题。您提到“当 Android 必须进入低功耗状态时,它会检查是否有任何唤醒锁被占用。”它在哪里做这个检查..它在linux内核中吗?以及如何与唤醒锁一起使用提前暂停和延迟恢复? 是的,唤醒锁保存在 linux 内核中。你可以去路径 /sys/power/wake_lock 看看是否有人持有它。任何应用程序最终都会通过 API 调用写入此路径以保持/释放唤醒锁。关于提前暂停和延迟恢复,这是一个很大的概念,请阅读我添加到答案中的链接。!希望对您有所帮助!【参考方案2】:

一个很好的link关于 Android 内核中的电源管理:

解释如下:

    唤醒锁 唤醒锁的类型 PowerManager 类 向 PM 驱动程序注册驱动程序 提前暂停

【讨论】:

以上是关于延迟暂停、早期恢复和唤醒锁。请解释的主要内容,如果未能解决你的问题,请参考以下文章

用 Rhino 解释 Java 中的 JavaScript:暂停/恢复脚本

unity,通俗解释什么是协程

在 Android 1.5 服务中使用唤醒锁

android睡眠后唤醒键没有反映

JAVAwait和notify用法,附生产/消费模型

Java如何实现线程的暂停和重新启用?求大神