一、流程
Activity.startActivity [這里中間會經(jīng)過多個Activity流程]
->Activity.startActivityForResult
->Instrumentation.execStartActivity
->ActivityTaskManagerService.startActivity [這是通過ActivityTaskManager.getService()]
->ActivityTaskManagerService.startActivityAsUser
->ActivityStartController.obtainStarter [這是為了獲取ActivityStarter]
->ActivityStarter.execute [setMayWait設置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 [開始暫停當前恢復的活動]
?->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 [這個流程的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對象是在ActivityRecord]
??->ActivityStack.completePauseLocked
??->RootActivityContainer.resumeFocusedStacksTopActivities
??->ActivityStack.resumeTopActivityUncheckedLocked
??->ActivityStack.resumeTopActivityInnerLocked
->ActivityStack.resumeTopActivityInnerLocked [暫停流程結束又回到了這個方法]
->ActivityStackSupervisor.startSpecificActivityLocked [分兩種情況,沒有應用進程和有]
->ActivityStackSupervisor.realStartActivityLocked [有應用程序進程]
->ActivityTaskManagerService.mH.sendMessage [沒有應用程序進程]
這里說明下:sendMessage其實是發(fā)送了一個Function,即ActivityManagerInternal::startProcess。下面就是分析startProcess
?->ActivityManagerInternal.startProcess [AMS.LocalService.startProcess]
?->ActivityManagerService.LocalService.startProcess
?->ActivityManagerService.startProcessLocked
?->ProcessList.startProcessLocked
?->ProcessList.startProcessLocked [三個參數(shù)]
?->ProcessList.startProcessLocked [五個參數(shù)]
?->ProcessList.startProcessLocked [十二個參數(shù)]
?->ProcessList.startProcess
?->Process.start [非zygote進程]
?->ZygoteProcess.start
?->ZygoteProcess.startViaZygote
??->ZygoteProcess.openZygoteSocketIfNeeded [這是由下一個方法調用]
??->ZygoteProcess.attemptConnectionToPrimaryZygote [嘗試連接Zygote]
??->ZygoteState.connect
?->ZygoteProcess.zygoteSendArgsAndGetResult
?->ZygoteProcess.attemptZygoteSendArgsAndGetResult
?->zygoteState.mZygoteOutputWriter.write(msgStr) [localsocket通信]
->執(zhí)行到這里,就已經(jīng)發(fā)送了Socket給Zygote進程,下面分析Zygote進程啟動
?->app_main.cpp的main方法
?->AndroidRuntime.start
?->ZygoteInit.main [app啟動Zygote進程]
?->new ZygoteServer()
?->zygoteServer.runSelectLoop(abiList) [循環(huán)監(jiān)聽AMS發(fā)來的消息]
?->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里面注冊]
???->com_android_internal_os_ZygoteInit_nativeZygoteInit
???->gCurRuntime->onZygoteInit #具體實現(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這個Binder]
??->ActivityManagerService.attachApplicationLocked [處理attachApplicationLocked]
???->ApplicationThread.bindApplication [綁定AMS這個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 [回到了啟動Activity的流程]
??->通過ClientTransaction啟動Activity
二、參考
Android10.0應用進程創(chuàng)建過程以及Zygote的fork流程-[Android取經(jīng)之路]
在Android 10.0中Activity的啟動流程