init:
- 掛載和創(chuàng)建系統(tǒng)文件
- 解析rc文件
- 進(jìn)入無限循環(huán)
- 執(zhí)行action -- zygote啟動
- 檢測并重啟進(jìn)程
- 接收子進(jìn)程的SIGCHLD信號,執(zhí)行響應(yīng)的方法
zygote:
- native
- 初始化Android運行環(huán)境
- 注冊jni
- 執(zhí)行ZygoteInit.main 方法 進(jìn)入Java層
- Java
- 創(chuàng)建 socket
- 執(zhí)行預(yù)加載
- 通過fork創(chuàng)建 SystemServer 進(jìn)程
- 進(jìn)入循環(huán):等待AMS的通知,創(chuàng)建對應(yīng)的進(jìn)程
SystemServer
nice-name 給進(jìn)程的名稱
pid = Zygote.forkSystemServer
//啟動 SystemServer.main
return handleSystemServerProcess(parsedArgs);
//開啟Binder線程池
ZygoteInit.nativeZygoteInit();
gCurRuntime->onZygoteInit();
sp<ProcessState> proc = ProcessState::self();
proc->startThreadPool();
// 運行 SystemServer.main
RuntimeInit.applicationInit
// 通過反射執(zhí)行 SystemServer.main
mMethod.invoke(null, new Object[] { mArgs });
SystemServer進(jìn)程:
-
createSystemContext();
//執(zhí)行systemMain()@ActivityThread,在systemMain方法中- new ActivityThread()兼丰,執(zhí)行attach()@ActivityThread
//在attach方法中 - new Instrumentation(),
- ContextImpl context = ContextImpl.createAppContext(
this, getSystemContext().mPackageInfo); - Application mInitialApplication = context.mPackageInfo.makeApplication(true, null);
- new ActivityThread()兼丰,執(zhí)行attach()@ActivityThread
-
mSystemServiceManager = new SystemServiceManager(mSystemContext); // 系統(tǒng)服務(wù)
- startService --> service.onStart(); // 繼承自 SystemService 的服務(wù)
-
startBootstrapServices(t); // 引導(dǎo)服務(wù) --AMS
//android 10開始 多了個 ATMS(ActivityTaskManagerService)-
mService = new ActivityTaskManagerService(context);
mService.start();
ServiceManager.addService(name, service,resumeTopActivityInnerLocked allowIsolated, dumpPriority);
-
創(chuàng)建 AMS -- 其他三個服務(wù)尖阔,持有 ATMS
mService = new ActivityManagerService(context, sAtm);mService.start();
-
startCoreServices(t); // 核心服務(wù)
-
startOtherServices(t); // 其他服務(wù) -- WMS
mActivityManagerService.systemReady // 啟動Launcher
startSystemUi(context, windowManagerF); // 啟動 SystemUI
mActivityManagerService.systemReady -->
mActivityTaskManager.onSystemReady@ActivityTaskManagerService -->
mAtmInternal.resumeTopActivities@ActivityTaskManagerService -->
mRootWindowContainer.resumeFocusedStacksTopActivities()@RootWindowContainer -->
resumeFocusedStacksTopActivities@RootWindowContainer -->
targetStack.resumeTopActivityUncheckedLocked@ActivityStack
--> resumeTopActivityInnerLocked@ActivityStack -->
resumeNextFocusableActivityWhenStackIsEmpty@ActivityStack
--> mRootWindowContainer.resumeHomeActivity@RootWindowContainer -->
startHomeOnTaskDisplayArea@RootWindowContainer -->
resolveHomeActivity@RootWindowContainer -->
mService.getActivityStartController().startHomeActivity@ActivityStartController obtainStarter@ActivityStartController -->
execute@ActivityStarter -->
executeRequest@ActivityStarter -->
startActivityInner@ActivityStarter
這里調(diào)用了startActivity()方法來啟動Launcher春贸,最終會進(jìn)入Launcher的onCreate()方法,Launcher啟動完成。
mSystemServiceManager.startBootPhase // 狀態(tài)設(shè)置
SystemServiceManager:管理服務(wù)的生命周期
ServerManager:管理Binder服務(wù)的
ServiceManager.getService(Context.ACTIVITY_TASK_SERVICE);
publishBinderService(Context.ACTIVITY_TASK_SERVICE, mService);
ServiceManager.addService(name, service, allowIsolated, dumpPriority); // 注冊Binder服務(wù)
Activity啟動流程:
startActivity@Activity --> startActivityForResult@Activity
--> mInstrumentation.execStartActivity@Instrumentation -->
ActivityTaskManager.getService().startActivity@ActivityTaskManagerService
--> startActivityAsUser@ActivityTaskManagerService
--> execute@ActivityStarter -->
executeRequest@ActivityStarter -->
startActivityUnchecked@ActivityStarter -->
startActivityInner@ActivityStarter -->
resumeFocusedStacksTopActivities@RootWindowContainer -->
resumeTopActivityUncheckedLocked@ActivityStack -->
resumeTopActivityInnerLocked@ActivityStack -->
startSpecificActivity@ActivityStackSupervisor -->
realStartActivityLocked@ActivityStackSupervisor -->
scheduleTransaction@ClientLifecycleManager -->
schedule@ClientTransaction -->
scheduleTransaction@ApplicationThread -->
scheduleTransaction@Activity -->
execute@TransactionExecutor -->
executeCallbacks@TransactionExecutor -->
execute@LaunchActivityItem -->
handleLaunchActivity@ActivityThread -->
performLaunchActivity@ActivityThread -->
createBaseContextForActivity@ActivityThread 、mInstrumentation.newActivity此疹、makeApplication@LoadApk -->
attach@Activity、callActivityOnCreate@Instrumentation -->
onCreate@Activity
小結(jié)
- 調(diào)用從system_server進(jìn)程傳過來的ClientTransaction.CallBack類中的execute方法遮婶,其繼續(xù)調(diào)用ActivityThread.handleLaunchActivity方法來啟動Activity蝗碎。
- ActivityThread.handleLaunchActivity調(diào)用performLaunchActivity方法啟動Activity
- performLaunchActivity先獲取啟動Activity的ActivityInfo,而后創(chuàng)建一個LoadedApk和上下文ContextImpl旗扑。在通過反射去創(chuàng)建此Activity對象蹦骑,并執(zhí)行Activity的onCreate方法。
SystemServer執(zhí)行流程圖:
Activity啟動:
Android 啟動流程時序圖:
Activity生命周期管理類圖:
下圖是ATMS處理startActivity過程臀防,并回調(diào)啟動進(jìn)程的ApplicationThread:
下圖為Android 30 之后眠菇,ActivityThread啟動Activity過程的時序圖: