一張圖弄清Activity的啓動過程

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

圖中相關模塊的做用

ActivityThread

能夠把它理解爲應用運行的主線類,它的主要功能有:github

包含了應用的入口 : 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系統中四大組件的運行,.net

ActivityStackSupervisor

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

ClientLifecycleManager

幫助AMS回調應用程序四大組件生命週期相關方法。3d

參考文章code

(Android 9.0)Activity啓動流程源碼分析cdn

The End

歡迎關注個人Android進階計劃看更多幹貨

歡迎關注個人微信公衆號:susion隨心

相關文章
相關標籤/搜索