Activity 的啟動過程:
1.從startActivty 方法進入跳轉(zhuǎn)至 2.startActivtyforResult() 參數(shù)中含有mMainThread.getApplationThread() 這個方法的類型是ApplactionThread 它 是ActivityThread的一個內(nèi)部類
調(diào)用AMS部分 3.執(zhí)行execStartActivity方法() 這個方法的真正實現(xiàn)者是ActivityManagerNative.getDefault();
繼承自ActivityManagerService而AMN 繼承自binder 并實現(xiàn)了IActivityManager 這個Binder真正的操作方法在AMS中的startActivity方法中
棧部分 4.在執(zhí)行execStartActivity 方法中還有一個checkActivityResult();這個方法是用來檢測activity 是否正常啟動當無法正常啟動時則會報出異常信息。 5.由此進入至 ActivityStackSupervisor中 6.執(zhí)行startActivityMayWait 7.執(zhí)行StartActivityLocked 8.執(zhí)行StartAcitityUncheackLocked 9.進入ActivityStack 中 10.執(zhí)行resumeTopActivityLocked 11.回到ActivityStakSuperviser 中 12.執(zhí)行StartSpecificAcitvitylocked 13.執(zhí)行realStartActivityLocked
在realStart ActivityLock中代碼 app.thread.scheduleLaunchActivity 其中aPPThread類型為IapplicationThread 在這個接口函數(shù)中聲明了大量的關(guān)于啟動和停止的方法。 由此我們推測這個接口的實現(xiàn)者 完成了大量的工作。 推測這個實現(xiàn)者是AcitivityThread 中的內(nèi)部類AppliactionThread 14.執(zhí)行的scheduleLaunchActivity 即是ApplicationThread的schedulelaunchAcitivity方法 發(fā)送一個啟動Activity 的handler消息給handler 處理 handler 的名稱為 H 15.Handler 的處理方式由 ActivityThread的handlelaunchAcitivity方法實現(xiàn) 其中交給handleResumeActivity方法來調(diào)用被啟動的Activity 的onResume這一個生命周期 16交給performLaunchActivity最終完成了Activity 的啟動過程
17PerFormLaunchActivity 主要完成的幾件事 1.從ActivityClientRecord中獲取待啟動的Activity 的信息 2.通過Instrumentation 的newActivity 方法 通過類加載器加載Activity 對象 3.通過LoadedApk 的makeApplication 方法創(chuàng)建Application 調(diào)用Application 的oncreate方法 4.創(chuàng)建 ContextImpl對象并通過attach方法來完成一些數(shù)據(jù)的初始化。 這里還會完成window 關(guān)聯(lián)等。 并調(diào)用activity 的onCreate方法
ContextImpl 創(chuàng)建特殊的單例模式
新聞熱點
疑難解答