PowerManager goToSleep 接口

以power键为例,power键按下灭屏的 reason为PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON,flag为0.

实际是通过binder服务调用PowerManagerService.java的goToSleep(),接口:

PowerManager各种接口内部执行时,很多情况下是执行一些XXXNoUpdateLocked()改变PM状态变量,还会通知WMS等模块PM状态变化。但是PM真正执行唤醒,休眠,亮灭屏等电源相关操作是updatePowerStateLocked().

具体到goToSleep接口就是先调用goToSleepNoUpdatedLocked()设置PM状态变量,然后调用updatePowerStateLocked()更新真正的电源相关逻辑。


goToSleepNOUpdataLocked的核心逻辑是setWakefulnessLocked()函数。先设置状态为DOZING.

 

PM系统当前状态共有四种定义:

WAKEFULNESS_ASLEEP:表示系统当前处于休眠状态,只能被wakeUp()调用唤醒。

WAKEFULNESS_AWAKE:表示系统目前处于正常运行状态。

WAKEFULNESS_DREAMING:表示系统当前正处于屏保的状态。

WAKEFULNESS_DOZING:表示系统正处于“doze”状态。这种状态下只有低耗电的“屏保”可以运行,其他应用进程都被挂起。

                                             这个Dozing和DeviceIdle模块中的DOZE不是概念哈!

猜你喜欢

转载自blog.csdn.net/dreamfly130/article/details/82759750
今日推荐