10.3.3 创建ActivityStack类

ActivityManagerService启动过程第三步的起点是ActivityThread.getSystemContext方法,这里的ActivityThread也就是第二步中创建的ActivityThread, getSystemContext返回的对象即第二步中创建的系统Context。这里需要将系统Context存储到ActivityManagerService的mContext成员变量中,然后创建ActivityStack并将其存入ActivityManagerService.mMainStack成员变量中。

ActivityStack用于管理Activity栈并维护其状态,该类与Activity的启动和调度有紧密关系,是第三步最重要的工作。创建ActivityStack的代码如下:


ActivityStack(ActivityManagerService service, Context context, boolean mainStack){

mService=service;

mContext=context;

mMainStack=mainStack;//true

PowerManager pm=

(PowerManager)context.getSystemService(Context.POWER_SERVICE);

//创建WakeLock用于控制系统休眠状态

mGoingToSleep=pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,

"ActivityManager-Sleep");

mLaunchingActivity=pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,

"ActivityManager-Launch");

mLaunchingActivity.setReferenceCounted(false);

}


由ActivityStack的创建过程可以看出,其与系统Context和ActivityManager Service关联到一起。

ActivityStack关联成功后,向ServiceManager中添加两个服务:batteryinfo和usagestats,用于监控系统运行状态。

ActivityManager ervice启动过程的第三步建立的类图关系如图10-4所示。

10.3.3 创建ActivityStack类 - 图1

图 10-4 ActivityManagerService启动过程第三步的类图关系

上述步骤执行完毕后,调用notifyAll方法通知AThread结束第一次等待,AThread接到通知后,便进入Looper循环。接下来便进入ActivityManagerService启动过程的第四步。