Activity啟動流程

2021-09-11 08:57:42 字數 1722 閱讀 6906

activity啟動流程很多文章都已經說過了,這裡說一下自己的理解。 activity啟動流程分兩種:

後邊啟動activity的流程是一樣的,區別是前邊判斷程序是否存在的那部分。

activity啟動的前提是已經開機,各項程序和ams等服務已經初始化完成,在這裡也提一下那些內容。

ipc:跨程序通訊,android中採用binder機制。

ams:pms的resoveintent驗證要啟動activity是否匹配。

暫停完,在該activity還不可見時,通知ams,根據要啟動的activity配置activitystack。然後判斷要啟動的activity程序是否存在?

在通過activitystacksupervisor來獲取當前需要顯示的activitystack。

handlelauchactivity:呼叫了performlauchactivity,裡邊instrumentation生成了新的activity物件,繼續呼叫activity生命週期。

雙方都是通過對方的**物件來進行通訊。

activity啟動流程(從launcher開始):

第一階段: launcher通知ams要啟動新的activity(在launcher所在的程序執行)

第二階段:ams先校驗一下activity的正確性,如果正確的話,會暫存一下activity的資訊。然後,ams會通知launcher程式pause activity(在ams所在程序執行)

第三階段: pause launcher的activity,並通知ams已經paused(在launcher所在程序執行)

activitythread.queueorsendmessage

h.handlemessage

activitythread.handlepauseactivity

activitymanagerproxy.activitypaused

第四階段:檢查activity所在程序是否存在,如果存在,就直接通知這個程序,在該程序中啟動activity;不存在的話,會呼叫process.start建立乙個新程序(執行在ams程序)

第六階段:處理新的應用程序發出的建立程序完成的通訊請求,並通知新應用程式程序啟動目標activity元件(執行在ams程序)

activitystack.realstartactivitylocked//真正要啟動activity了!

activitythread.queueorsendmessage

h.handlemessage //at的handler來處理接收到的launch_activity的訊息

activitythread.handlelaunchactivityactivitythread.performlaunchactivity

instrumentation.newactivity//呼叫instrumentation類來新建乙個activity物件

instrumentation.callactivityoncreatemainactivity.oncreate

activitythread.handleresumeactivity

amp.activityresumed

ams.activityresumed(ams程序)

Activity啟動流程

0x01 public void startactivity intent intent 最終走到 public void startactivityforresult requirespermission intent intent,int requestcode,nullable bundle ...

activity啟動流程

所有程序都是由init程序直接或間接fork出來的 android系統啟動時,init程序會fork出zygote,意為 受精卵 後面的所有程序都是zygote 出來的 在zygote程序初始化時會啟動systemserver程序,平時所用到的ams pms wms 網路等服務都是在systemse...

activity啟動流程

今天要分析下fwk中activity的啟動流程,之前看別人畫的流程圖,總是很快就忘記了,而且總是摸不著重點,遇到具體問題時還是不知道從何入手,又得從頭看起。後來我想通了一件事,我們在分析這種原始碼時不應該過渡糾結於流程圖與某個具體函式,而應該從巨集觀角度想想 要實現這個功能,他應該要包含哪些步驟?新...