Linux 3.10
Android 4.4
http://blog.csdn.net/u013686019/article/details/53691895
一、PowerManagerService
引起休眠动作(进入休眠前执行一些必要的操作)的事件有两个:
- PowerKey事件,通过JNI调用PowerManagerService中的goToSleepFromNative()方法
- Timeout,指【设置->显示->休眠】中设置的Timeout数值
Android休眠在PowerManagerService中的流程如下图:
图示:最终都会调用到updatePowerStateLocked()方法,在更新一些标志的状态、发送休眠通知后,调用updateSuspendBlockerLocked()执行休眠锁的释放动作。
二、PowerManagerService中Timeout处理流程
/**
* PowerManagerService设置了很多的标志位,用来标识某个事件的状态是否发生改变,比如:
* DIRTY_SETTINGS,一旦系统设置发生变化,DIRTY_SETTINGS位就会被设置,
* 处理函数检测到DIRTY_SETTINGS被置位,就进行相应的动作
* dirty:包含了所有发生变化的标志
*/
private void updateUserActivitySummaryLocked(long now, int dirty) {
// Update the status of the user activity timeout timer.
if ((dirty