一張圖弄清Activity的啟動過程

susion發表於2019-03-06

Activity啟動相關原始碼比較複雜、涉及到的鏈路較多,我經常在理清楚一遍之後過一段時間再閱讀就和第一次讀一樣,依舊要費一番功夫才能理清。為了加深對Activity啟動過程的理解也方便以後回顧因此我把整個Activity的啟動過程總結為一張圖。此圖基於9.0的Android原始碼(Activty相關程式碼雖然在不斷重構但核心邏輯還是沒變的)。

一張圖弄清Activity的啟動過程

圖中相關模組的作用

ActivityThread

可以把它理解為應用執行的主線類,它的主要功能有:

包含了應用的入口 : main()

這個函式主要做了下面工作:

  1. 利用ApplicationThread建立了應用與AMS的連結。
  2. 構造了Instrumentation
  3. 建立了應用的Application
  4. 開啟了主執行緒的訊息處理模型。

管理應用四大元件的執行

ApplicationThread

它是應用程式在AMS中的Binder物件,AMS利用它可以和ActivityThread通訊,四大元件相關回撥都是通過它來告訴ActivityThread的。

Instrumentation

這個類伴隨著ActivityThread一塊誕生,主要用來幫助ActivityThread來管理Activity相關工作。它持有著AMS在應用端的BinderActivityThread主要通過它來和AMS通訊。

ActivityManagerService

它是Android最核心的服務,主要管理著Android系統中四大元件的執行,

ActivityStackSupervisor

負責所有Activity棧的管理。內部管理了mHomeStack、mFocusedStack和mLastFocusedStack三個Activity棧。其中,mHomeStack管理的是Launcher相關的Activity棧;mFocusedStack管理的是當前顯示在前臺Activity的Activity棧;mLastFocusedStack管理的是上一次顯示在前臺Activity的Activity棧。

ClientLifecycleManager

幫助AMS回撥應用程式四大元件生命週期相關方法。

參考文章

(Android 9.0)Activity啟動流程原始碼分析

The End

歡迎關注我的Android進階計劃看更多幹貨

歡迎關注我的微信公眾號:susion隨心

一張圖弄清Activity的啟動過程

相關文章