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