Activity啟動相關原始碼比較複雜、涉及到的鏈路較多,我經常在理清楚一遍之後過一段時間再閱讀就和第一次讀一樣,依舊要費一番功夫才能理清。為了加深對Activity啟動過程的理解也方便以後回顧因此我把整個Activity的啟動過程總結為一張圖。此圖基於9.0的Android原始碼(Activty相關程式碼雖然在不斷重構但核心邏輯還是沒變的)。
圖中相關模組的作用
ActivityThread
可以把它理解為應用執行的主線類,它的主要功能有:
包含了應用的入口 : main()
這個函式主要做了下面工作:
- 利用
ApplicationThread
建立了應用與AMS
的連結。 - 構造了
Instrumentation
。 - 建立了應用的
Application
。 - 開啟了主執行緒的訊息處理模型。
管理應用四大元件的執行
ApplicationThread
它是應用程式在AMS
中的Binder
物件,AMS
利用它可以和ActivityThread
通訊,四大元件相關回撥都是通過它來告訴ActivityThread
的。
Instrumentation
這個類伴隨著ActivityThread
一塊誕生,主要用來幫助ActivityThread
來管理Activity
相關工作。它持有著AMS
在應用端的Binder
,ActivityThread
主要通過它來和AMS
通訊。
ActivityManagerService
它是Android最核心的服務,主要管理著Android系統中四大元件的執行,
ActivityStackSupervisor
負責所有Activity棧的管理。內部管理了mHomeStack、mFocusedStack和mLastFocusedStack三個Activity棧。其中,mHomeStack管理的是Launcher相關的Activity棧;mFocusedStack管理的是當前顯示在前臺Activity的Activity棧;mLastFocusedStack管理的是上一次顯示在前臺Activity的Activity棧。
ClientLifecycleManager
幫助AMS
回撥應用程式四大元件生命週期相關方法。
參考文章
The End
歡迎關注我的Android進階計劃看更多幹貨
歡迎關注我的微信公眾號:susion隨心