一、流程
Activity.startActivity [這里中間會(huì)經(jīng)過多個(gè)Activity流程]
->Activity.startActivityForResult
->Instrumentation.execStartActivity
->ActivityTaskManagerService.startActivity [這是通過ActivityTaskManager.getService()]
->ActivityTaskManagerService.startActivityAsUser
->ActivityStartController.obtainStarter [這是為了獲取ActivityStarter]
->ActivityStarter.execute [setMayWait設(shè)置mRequest.mayWait為true]
->ActivityStarter.startActivityMayWait [初始化rInfo和aInfo]
->ActivityStarter.startActivity
->ActivityStarter.startActivity [初始化err和ActivityRecord]
->ActivityStarter.startActivity
->ActivityStarter.startActivityUnchecked [初始化TaskRecord]
->RootActivityContainer.resumeFocusedStacksTopActivities
->ActivityStack.resumeTopActivityUncheckedLocked
->ActivityStack.resumeTopActivityInnerLocked
?->ActivityStack.startPausingLocked [開始暫停當(dāng)前恢復(fù)的活動(dòng)]
?->PauseActivityItem.obtain
?->ActivityTaskManagerService.getLifecycleManager
?->ClientLifecycleManager.scheduleTransaction
?->ClientLifecycleManager.scheduleTransaction
?->ClientTransaction.getClient
?->ClientTransaction.schedule
?->IApplicationThread.scheduleTransaction
?->ActivityThread.scheduleTransaction
?->ClientTransactionHandler.scheduleTransaction
?->ActivityThread.sendMessage [H.EXECUTE_TRANSACTION]
?->TransactionExecutor.execute
?->TransactionExecutor.executeCallbacks [這個(gè)流程的item是PauseActivityItem]
?->TransactionExecutor.cycleToPath
??->TransactionExecutor.performLifecycleSequence
?->PauseActivityItem.execute
??->ActivityThread.handlePauseActivity
??->ActivityThread.performPauseActivity
??->ActivityThread.performPauseActivityIfNeeded
??->Instrumentation.callActivityOnPause
??->Activity.performPause
??->Activity.onPause
?->PauseActivityItem.postExecute
??->ActivityTaskManagerService.activityPaused
??->ActivityStack.activityPausedLocked [ActivityStack對(duì)象是在ActivityRecord]
??->ActivityStack.completePauseLocked
??->RootActivityContainer.resumeFocusedStacksTopActivities
??->ActivityStack.resumeTopActivityUncheckedLocked
??->ActivityStack.resumeTopActivityInnerLocked
->ActivityStack.resumeTopActivityInnerLocked [暫停流程結(jié)束又回到了這個(gè)方法]
->ActivityStackSupervisor.startSpecificActivityLocked [分兩種情況,沒有應(yīng)用進(jìn)程和有]
->ActivityStackSupervisor.realStartActivityLocked [有應(yīng)用程序進(jìn)程]
->ActivityTaskManagerService.mH.sendMessage [沒有應(yīng)用程序進(jìn)程]
這里說(shuō)明下:sendMessage其實(shí)是發(fā)送了一個(gè)Function,即ActivityManagerInternal::startProcess。下面就是分析startProcess
?->ActivityManagerInternal.startProcess [AMS.LocalService.startProcess]
?->ActivityManagerService.LocalService.startProcess
?->ActivityManagerService.startProcessLocked
?->ProcessList.startProcessLocked
?->ProcessList.startProcessLocked [三個(gè)參數(shù)]
?->ProcessList.startProcessLocked [五個(gè)參數(shù)]
?->ProcessList.startProcessLocked [十二個(gè)參數(shù)]
?->ProcessList.startProcess
?->Process.start [非zygote進(jìn)程]
?->ZygoteProcess.start
?->ZygoteProcess.startViaZygote
??->ZygoteProcess.openZygoteSocketIfNeeded [這是由下一個(gè)方法調(diào)用]
??->ZygoteProcess.attemptConnectionToPrimaryZygote [嘗試連接Zygote]
??->ZygoteState.connect
?->ZygoteProcess.zygoteSendArgsAndGetResult
?->ZygoteProcess.attemptZygoteSendArgsAndGetResult
?->zygoteState.mZygoteOutputWriter.write(msgStr) [localsocket通信]
->執(zhí)行到這里,就已經(jīng)發(fā)送了Socket給Zygote進(jìn)程,下面分析Zygote進(jìn)程啟動(dòng)
?->app_main.cpp的main方法
?->AndroidRuntime.start
?->ZygoteInit.main [app啟動(dòng)Zygote進(jìn)程]
?->new ZygoteServer()
?->zygoteServer.runSelectLoop(abiList) [循環(huán)監(jiān)聽AMS發(fā)來(lái)的消息]
?->ZygoteServer.acceptCommandPeer [pollIndex == 0]
??->ZygoteSocket.accept()
?->ZygoteServer.createNewConnection
?->new ZygoteConnection
?->ZygoteConnection.processOneCommand [pollIndex < usapPoolEventFDIndex]
?->Zygote.forkAndSpecialize [這里就是fork流程]
??->Zygote.nativeForkAndSpecialize
??->com_android_internal_os_Zygote.cpp#nativeForkAndSpecialize
??->com_android_internal_os_Zygote.cpp#ForkAndSpecializeCommon
??->fork 不再往底層分析 processOneCommand
?->ZygoteConnection.handleChildProc [parsedArgs.mInvokeWith=null]
?->ZygoteInit.zygoteInit [isZygote=false]
??->RuntimeInit.redirectLogStreams()
??->RuntimeInit.commonInit()
??->ZygoteInit.nativeZygoteInit() [在AndroidRuntime里面注冊(cè)]
???->com_android_internal_os_ZygoteInit_nativeZygoteInit
???->gCurRuntime->onZygoteInit #具體實(shí)現(xiàn)在AppRuntime即app_main里面
???->ProcessState::self->startThreadPool #開啟binder線程池
??->RuntimeInit.applicationInit [回到ZygoteInit]
??->RuntimeInit.findStaticMain
??->new MethodAndArgsCaller [最終返回給runSelectLoop]
??->MethodAndArgsCaller.run [在ZygoteInit.main取到runnable執(zhí)行]
??->Method.invoke [在MethodAndArgsCaller.run中]
??->ActivityThread.main [傳到MethodAndArgsCaller中]
??->new ActivityThread
??->ActivityThread.attach
??->ActivityManagerService.attachApplication [傳入IApplicationThread這個(gè)Binder]
??->ActivityManagerService.attachApplicationLocked [處理attachApplicationLocked]
???->ApplicationThread.bindApplication [綁定AMS這個(gè)binder]
???->ActivityThread.sendMessage [發(fā)送BIND_APPLICATION]
???->ActivityThread.handleBindApplication
????->ActivityThread.getPackageInfoNoCheck [獲取LoadedApk]
?????->ContextImpl.createAppContext
????->反射創(chuàng)建Instrumentation
????->LoadedApk.makeApplication
?????->Instrumentation.newApplication
??????->Application.attach
????->Instrumentation.callApplicationOnCreate
??->ActivityManagerService.attachApplicationLocked [回到attachApplicationLocked]
???->AtmInternal.attachApplication [ActivityTaskManagerService]
??->ActivityStackSupervisor.realStartActivityLocked [回到了啟動(dòng)Activity的流程]
??->通過ClientTransaction啟動(dòng)Activity
二、參考
Android10.0應(yīng)用進(jìn)程創(chuàng)建過程以及Zygote的fork流程-[Android取經(jīng)之路]
在Android 10.0中Activity的啟動(dòng)流程