Android Activity啟動三部曲(一)
背景
本章作為Activity啟動流程的第一篇,將對呼叫過程到ActivityManagerService(以下簡稱AMS)之前的工作做以說明,並對下一篇執行過程做鋪墊。
計劃在第二篇講解到啟動新程式中,為啟動Activity做準備(已完成)。
在第三篇,主要講解如何在新程式中啟動Activity,以及Activity各種宣告週期的回撥(已完成)。
使用原始碼:Nougat - 7.0.0_r1
Activity啟動(一)
首先來通過一張大圖,看看Activity的啟動過程,在這一部分中,將呼叫過程先截止到AMS。
說明:
- 其實,不管是根 Activity( 在Intent Filter中標記為Launcher和Main)或者子 Activity(除了根Activity的其他Activity),它們的 start 過程,都將會由上圖中的 Instrumentation 執行 execStartActivity。
- 通過 Instrumentation 的 execStartActivity 方法,得到一個單例,即上圖中的 gDefault ,這個單例實際上是 AMS 提供給客戶端的代理。順便說一句,這種單例方式為一種外掛化方式提供了良好的基礎,可以Hook掉這個 gDefault,搞事情。具體可參考
- 最終執行到了 AMS代理類中的 startActivity 方法。這裡將進行Binder通訊。如果對Binder機制不清楚,可以參看這裡,startActivity請求最終由AMS代理類通過Binder機制傳送到 AMS 服務端,交給AMS處理,這是標準的CS架構。
- 為啥要交給 AMS 處理呢?startActivity將會啟動一個非常重要的元件,這麼大的事,必須要交給系統集中處理、管理。正如在十字路口,如果沒有紅綠燈,用不了多久,交通就會癱瘓。AMS 通過資料結構集中對所有的Activity進行管理,為如絲般順滑地使用者體驗提供基礎的基礎的基礎。
小結
本節體現了Binder通訊機制,以及建立在該機制之上的服務提供方和客戶端的CS架構。
AMS是大家的AMS,只有一個,但是卻有很多的App,每個App都可以通過AMS提供的代理類和AMS進行通訊。請求AMS處理資料,比如開啟一個新的Activity。AMS是所有Activity的處理中心,記錄儲存追蹤著所有的Activity。
下一節,我們來看看 AMS 如何處理 startActiviy的請求。
相關文章
- 擼擼Android的羊毛(一)----Activity啟動模式Android模式
- Android-Activity的啟動模式Android模式
- Android Activity的啟動過程Android
- Android Activity啟動模式全面解析Android模式
- [Android]Android Activity 啟動模式詳解Android模式
- Android Activity啟動流程原始碼分析Android原始碼
- Android程式啟動與Activity顯示Android
- Android原始碼分析:Activity啟動流程Android原始碼
- 【Android原始碼】Activity的啟動流程Android原始碼
- Android中Activity啟動過程探究Android
- Android 8.0 原始碼分析 (四) Activity 啟動Android原始碼
- Activity 的 "啟動流程"(基於 Android 9.0)Android
- Android中Activity的四種啟動方式Android
- Android的activity的四種啟動方式Android
- 淺析Android Activity的啟動過程Android
- Android Activity 啟動模式的功能驗證Android模式
- 完全理解android Activity啟動模式LauchMode (深入Activity與任務棧)Android模式
- Activity啟動分析(一)--ActivityThreadthread
- Activity啟動模式模式
- 深入理解Android 之 Activity啟動流程(Android 10)Android
- Android學習筆記-Activity的啟動模式Android筆記模式
- android 團隊開發技巧1 - activity 啟動Android
- Android中的Activity四種啟動模式(launchMode)Android模式
- Android service裡面啟動activity和alertdialogAndroid
- 原始碼閱讀之Activity啟動與App啟動流程 - Android 9.0原始碼APPAndroid
- 原始碼閱讀之Activity啟動與App啟動流程 – Android 9.0原始碼APPAndroid
- 一張圖弄清Activity的啟動過程
- Android Activity是如何啟動的?Activity的生命週期是如何呼叫的?Android
- Activity啟動流程分析
- activity的啟動模式模式
- activity 啟動流程分析
- [Android]關閉所有Activity,開啟某個ActivityAndroid
- Android黑科技:如何啟動未註冊的ActivityAndroid
- Android入門教程之Activity(生命週期,啟動...)Android
- Android系統原始碼分析--Activity啟動過程Android原始碼
- Android Activity的四大啟動模式詳解Android模式
- 記一次android app啟動錯誤 Error running :Default Activity not foundAndroidAPPError
- 一篇文章搞懂 Activity 啟動模式模式