10.6.4 运行Runnable回调接口
执行回调接口即执行传入systemReady的Runnable参数的run方法。代码如下:
public void systemReady(final Runnable goingCallback){
……//省略前三部分内容
if(goingCallback!=null)goingCallback.run();
首先看传入的goingCallback参数,回到SystemServer.java文件,定位到ServerThread的run方法,代码如下:
ActivityManagerService.self().systemReady(new Runnable(){
public void run(){
if(!headless)startSystemUi(contextF);//启动SystemUIService
try{
if(batteryF!=null)batteryF.systemReady();
}catch(Throwable e){
reportWtf("making Battery Service ready",e);
}
……//省略其他模块的systemReady
Watchdog.getInstance().start();//启动Watchdog
……//省略其他模块的systemReady
}
});
ActivityManagerService的systemReady在第四部分主要做了以下工作:
1)启动SystemUIService服务:该服务会根据当前设备是平板电脑还是手机,分别启动不同的状态栏。该服务定义于frameworks/base/packages/SystemUI中,编译后为SystemUI.apk。
2)执行其他系统服务的systemReady方法:包括BatteryService、NetworkManagementService等。
3)启动软件Watchdog。
可见一些系统服务依赖于ActivityManagerService的运行状态,只有ActivityManagerService本身万事俱备,才会通知其他一些系统服务进入systemReady状态。
前四部分工作完成后,便进入第五部分工作。