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状态。

前四部分工作完成后,便进入第五部分工作。