Launcher启动流程
1、AMS的systemReady()
上回讲述了《Android系统启动流程》,当系统在Framework层经过一系列多种语言程序有来有回之后,系统服务会被其中,其中包括AMS,startOtherServices()方法执行后阶段,各种被启动起来的Service会各种掉systemReady();其中AMS的systemReady就会被调用,这时候就是告诉应用层说我系统准备好了,SystemServer爸爸要撤了。
SystemServer.java
private void startOtherServices() {
... 省略 摘要
try {
// TODO: use boot phase
mPowerManagerService.systemReady(mActivityManagerService.getAppOpsService());
mPackageManagerService.systemReady();
mDisplayManagerService.systemReady(safeMode, mOnlyCore);
} catch (Throwable e) {
}
mActivityManagerService.systemReady(new Runnable()){
...
}
wm.systemReady();
...
}
1.ActiviyManagerService -> systemReady()
public void systemReady(final Runnable goingCallback) {
。。。
// Check to see if there are any update receivers to run.
if (!mDidUpdate) {
if (mWaitingUpdate) {
return;
}
//除非已升级,如果检测没有做过升级,则启动升级
mWaitingUpdate = deliverPreBootCompleted(new Runnable() {
public void run() {
synchronized (ActivityManagerService.this) {
mDidUpdate = true;
}
showBootMessage(mContext.getText(
R.string.android_upgrading_complete),
false