當前位置:編程學習大全網 - 網絡軟體 - Activity啟動流程筆記

Activity啟動流程筆記

普通Activity的啟動就是通過調用startActivity方法啟動壹個新的Activity,總體流程如下圖:

其中涉及到了兩個進程,壹個是App進程和AMS進程。整體的步驟是:

1.啟動者Activity向Instrumentation請求啟動目標的Activity。

2. Instrumentation通過AMS在App進程的IBinder接口(IActivityManager)訪問AMS,此時App進程會阻塞等待AMS的調用返回,采用的跨進程通信技術是AIDL。

3.AMS會進行壹系列的驗證工作,如判斷目標Activity實例是否存在、啟動模式是什麽、有沒有在AndroidManifest中註冊等等。

4.當AMS驗證結束後會通過ClinentLifeCycleManager發送事物給App進程,利用App進程在AMS進程的IBinder接口(IApplicationThread)訪問App進程ApplicationThread,采用的跨進程通信方式是AIDL。

5.ApplicationThread是ActivityThread的內部類,當ApplicationThread接受到來自AMS的事務後,會將事務直接轉交給ActivityThread處理。

6.ActivityThread通過Instrumentation利用類加載器(反射)進行實例的創建,同時利用Instrumentation回調目標Activity的生命周期。

介紹幾個關鍵的類:

Instrumentation:Instrumentation 是 Activity 與外界聯系的類(不是 Activity 本身的類都統稱為外界)。目標 Activity 通過 Instrumentation 來請求啟動,ActivityThread 通過 Instrumentation 來創建 Activity 和回調 Activity 的生命周期。

ActivityThread:每個應用程序只有壹個唯壹實例,負責對 Activity 創建的管理。ActivityThread 的內部類 ApplicationThread 只負責 App 進程和 AMS 進程的通信,將來自 AMS 的事務交給 ActivityThread 處理。

AMS,全稱 ActivityManagerService,系統級服務,負責管理四大組件。

根Actvity就是我們點擊手機桌面圖標時,應用程序啟動的第壹個Activity。啟動根Activity的流程其實和啟動普通Activity的流程類似,只是啟動根Activity時需要新建壹個App進程。總體流程如下圖:

其中涉及到四個進程分別是:Launcher進程、AMS進程、App進程、Zygote進程。

1.點擊桌面圖標後,Launcher進程訪問AMS進程請求啟動目標Activity,采用的跨進程方式是AIDL。

2 AMS進程訪問Zygote進程請求啟動壹個新的進程。采用的跨進程方式是Socket。

3 Zygote進程通過調用fork函數創建壹個App進程。

4 App進程創建完成後,App進程訪問AMS進程進行通知,采用的跨進程方式是AIDL。

5 AMS進程收到來自App進程的通知後,將啟動Activity的操作封裝成事務,並將封裝好的事務發送給App進程。

6 App進程接受到來自AMS進程的事務後,根據事務創建目標Activity,並回調目標Activity的生命周期。

本文主要是用來記錄自己的學習筆記,看原文請移步: Activity 啟動流程

  • 上一篇:挑三揀四還是挑三撿四哪個是對的
  • 下一篇:代維是什麽意思?
  • copyright 2024編程學習大全網