5.2.4 BootComplete处理

这部分的代码如下:

[—>PowerManagerService.java:BootCompletedReceiver]


private final class BootCompletedReceiver extends BroadcastReceiver{

public void onReceive(Context context, Intent intent){

bootCompleted();//调用PMS的bootCompleted函数

}

}


[—>PowerManagerService.java:bootCompleted]


void bootCompleted(){

synchronized(mLocks){

mBootCompleted=true;

//再次碰见userActivity,根据前面的描述,此时将重新计算屏幕超时时间

userActivity(SystemClock.uptimeMillis(),false, BUTTON_EVENT, true);

updateWakeLockLocked();//此处先分析这个函数

mLocks.notifyAll();

}

}


在以上代码中,再一次遇见了userActivity,暂且将其放到一边,我们先来分析update-WakeLockLocked函数,其代码如下:


private void updateWakeLockLocked(){

/*

mStayOnConditions用于控制当插上USB时,手机是否保持唤醒状态。

mBatteryService的isPowered用于判断当前是否处于USB充电状态。

如果满足下面的if条件,则PMS需要使用WakeLock来确保系统不会掉电

*/

if(mStayOnConditions!=0&&mBatteryService.isPowered(mStayOnConditions)){

mStayOnWhilePluggedInScreenDimLock.acquire();

mStayOnWhilePluggedInPartialLock.acquire();

}else{

//如果不满足if条件,则释放对应的WakeLock,这样系统就可以进入休眠状态

mStayOnWhilePluggedInScreenDimLock.release();

mStayOnWhilePluggedInPartialLock.release();

}

}


mStayOnWhilePluggedInScreenDimLock和mStayOnWhilePluggedInPartialLock都为Unsy-nchronizedWakeLock类型,它们封装了WakeLock,可帮助PMS在使用它们时免遭线程同步之苦。