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-4 ActivityManagerService启动过程第三步的类图关系
上述步骤执行完毕后,调用notifyAll方法通知AThread结束第一次等待,AThread接到通知后,便进入Looper循环。接下来便进入ActivityManagerService启动过程的第四步。