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两个成员,至于它们的具体作用,后续分析会介绍。
下面分析第二个关键点。