
與之前不同的是添加了ActivityStartController, ActivityStarter , ClientLifecycleManager
并且不同的狀態(tài)是用的是?ActivityLifecycleItem,其子類有PauseActivityItem,LaunchActivityItem等,需要實現(xiàn)preExecute, execute,PostExecute 三個主要方法
并且ActivityThread 繼承了ClientTransactionHandler,在scheduleTransaction 中執(zhí)行preExecute,并發(fā)送消息到H中,在TransactionExecutor中執(zhí)行execute和postExecute,execute執(zhí)行handle方法,postExecute執(zhí)行相應(yīng)的回調(diào)
結(jié)構(gòu)

具體過程
1. Activity1調(diào)用startActivity,實際會調(diào)用Instrumentation類的execStartActivity方法,Instrumentation是系統(tǒng)用來監(jiān)控Activity運行的一個類,Activity的整個生命周期都有它的影子。(1- 4)
2. 通過跨進程的binder調(diào)用,進入到ActivityManagerService中,其內(nèi)部會處理Activity棧,通知Activity1 Pause,Activity1 執(zhí)行Pause 后告知AMS。(5 - 29)
3. 在ActivityManagerService中的startProcessLocked中調(diào)用了Process.start()方法。并通過連接調(diào)用Zygote的native方法forkAndSpecialize,執(zhí)行fork任務(wù)。之后再通過跨進程調(diào)用進入到Activity2所在的進程中。(30 - 36)
4. ApplicationThread是一個binder對象,其運行在binder線程池中,內(nèi)部包含一個H類,該類繼承于類Handler。主線程發(fā)起bind Application,AMS 會做一些配置工作,然后讓主線程 bind ApplicationThread,ApplicationThread將啟動Activity2的信息通過H對象發(fā)送給主線程。發(fā)送的消息是EXECUTE_TRANSACTION,消息體是一個 ClientTransaction,即 LaunchActivityItem。主線程拿到Activity2的信息后,調(diào)用Instrumentation類的newActivity方法,其內(nèi)通過ClassLoader創(chuàng)建Activity2實例。(37 - 40)
5. 通知Activity2去performCreate。(41 - 最后)
注:現(xiàn)在發(fā)送的都是EXECUTE_TRANSACTION ,通過 TransactionExecutor 來執(zhí)行?ClientTransaction, ClientTransaction 中包含各種 ClientTransactionItem,如 PauseActivityItem、LaunchActivityItem、StopActivityItem、ResumeActivityItem、DestroyActivityItem 等,這些Item的execute方法來處理相應(yīng)的handle,如handlePauseActivity、handleLaunchActivity等,通知相應(yīng)的Activity來perform。
再盜一張圖
