話語不多 ,整個順序流程方便自己以后查看.
開始有Activity的startActivity()開始.
Activity.java
這兩個方法最終會調(diào)用
Instrumemtation.java
這里有Activity類 改調(diào)用了Instrumemtation類中execStartActivity()
這里的ActivityTaskManager.getService()進(jìn)入后可以發(fā)現(xiàn)它時一個aidl調(diào)用,所以可以看出來其實一個應(yīng)用中的AActivity啟動BActivity其實是進(jìn)程間通信
ActivityTaskManagerService是IActivityTaskManager的實現(xiàn)類.
所以這里調(diào)用的其實是ActivityTaskManagerService類中的startActivity()
之后調(diào)用startActivityAsUser()
調(diào)用 下面方法中需要注意的是這里有個setMayWait()方法和最終的execute()
這里的setMayWait()方法 將mRquest.myWait 設(shè)置為true 為之后做準(zhǔn)備
其中g(shù)etActivityStartController()中返回的是ActivityStartController
ActivityStartController類中的obtainStarter()
這里有個mFactory 看導(dǎo)入的包 可以看到是來自ActivityStarterFactory進(jìn)入該類.
可以看到這個類是個接口? 需要找到Factory的實現(xiàn)類? 剛好該類的下方有一個DefaultFactory是Factory的實現(xiàn)類 而且搜索后暫時只找到了這一個 看一下 找到對應(yīng)的obtain方法
obtain()方法中的 mStarterPool 是一個同步池
這個同步池是處理activity頻繁創(chuàng)建和跳轉(zhuǎn)的一個機(jī)制
最終調(diào)用的還是ActivityStarter中的excute()方法
在上面mRquest.myWait? 被設(shè)置成了true 所以在這里 會調(diào)用startActvityMyWait()方法
在startActvityMyWait()這個方法里最終會調(diào)用startActivity()這個方法
之后
調(diào)用重載方法 startActivity()
在該方法中
繼續(xù)調(diào)用重載方法startActivity()
在startActivityUnchecked()方法中有
ActivityStack中的方法
在resumeTopActivityInnerLocked()中
mStatckSupervisor
ActivityStackSupervisor 類中? 在startSpecificActivityLocked中 找到realStartActivityLocked()
在realStartActivityLocked()方法中.
有兩個重要的部分!!!
第一個是增加了callBack? 后面很有用
LaunchActivityItem 是ClientTransactionItem的子類
第二個?執(zhí)行啟動activity任務(wù)
LaunchActivityItem.obtain() 方法
ClientLifecycleManager中scheduleTransaction()
ClientTransaction類中的
ClientTransaction類中的mClient
需要找到IApplicationThread的實現(xiàn)類? 搜尋后找不到? (可以網(wǎng)上查些資料) IApplicationThread是在ActivityThread的內(nèi)部類
在ActivityThread類中.
ActivityThread.this.sheduleTransaction指的是ActivityThread的父類中的方法
ClientTransactionHandler的實現(xiàn)類 是ActivityThread 所以給sendMessage()在ActivityThread中尋找
進(jìn)入TransactionExecutor 類中的execute()
回到之前代碼中查找callbacks是哪里來的?
在執(zhí)行啟動actvity時加入了callback 即 LaunchActivityItem
?這里的execute()是LaunchActivityItem執(zhí)行的.
LaunchActivityItem.java
可以看出client即為 ClientTransactionHandler
ClientTransactionHandler.java中 可以看出是一個abstract 方法 需要調(diào)用其子類中的方法
ActivityThread即為其子類,所以查找ActivityThread類中的handleActivity()
ActivityThread中handleLaunchActivity()
ActivityThread
ActivityThread中performLaunchActivity()方法中有
Instrumentation中 callActivityOnCreate()
進(jìn)入Activity中performCreate()