5.2 初识PowerManagerService

PMS由SystemServer在ServerThread线程中创建。这里从中提取了4个关键调用点,如下所示:

[—>SystemServer.java:run]


……//ServerThread的run函数

power=new PowerManagerService();//①创建PMS对象

ServiceManager.addService(Context.POWER_SERVICE, power);//注册到SM中

……

//②调用PMS的init函数

power.init(context, lights, ActivityManagerService.self(),battery);

……//其他服务

power.systemReady();//③调用PMS的systemReady

……//系统启动完毕,会收到ACTION_BOOT_COMPLETED广播

//④PMS处理ACTION_BOOT_COMPLETED广播


先从第一个关键点即PMS的构造函数开始分析。

5.2.1 PMS构造函数分析

PMS构造函数的代码如下:

[—>PowerManagerService.java:PowerManagerService]


PowerManagerService(){

long token=Binder.clearCallingIdentity();

MY_UID=Process.myUid();//取本进程(即SystemServer)的uid及pid

MY_PID=Process.myPid();

Binder.restoreCallingIdentity(token);

//设置超时时间为1周。Power类封装了同Linux内核交互的接口。本章最后再来分析它

Power.setLastUserActivityTimeout(7243600*1000);

//初始化两个状态变量,它们非常有意义。其具体作用后续再分析

mUserState=mPowerState=0;

//将自己添加到看门狗(Watchdog)的监控管理队列中

Watchdog.getInstance().addMonitor(this);

}


PMS的构造函数比较简单。值得注意的是mUserState和mPowerState两个成员,至于它们的具体作用,后续分析会介绍。

下面分析第二个关键点。