筆記 Activity在server端啟動流程

2021-09-01 05:25:42 字數 1848 閱讀 2483

此階段 6 步驟:

獲取client端的uid,判斷client端是否有許可權啟動應用程式activity。

查詢系統中域intent 匹配的activity

1 呼叫resolveactivity 通過pkms 查詢是否存在指定intent的activity

2 根據caller判斷啟動activity的客戶端是應用程式還是其他查詢(adb shell)

3 呼叫activitystack.startactivitylocked 執行預啟動階段第三步

4.處理wait 狀態,正常啟動狀態不會wait

adb下「am start -w 」 啟動activity 時,需要wait 狀態

1.建立activity 的activityrecord 物件,代表此activoty 在ams 啟動流程中單位;

1.根據啟動標記 和 啟動模式,判斷是否需要在新的task 中執行目標activity;

2.判斷是否有可服用的task 或者activity;

需要在新的task 總執行activity的條件有如下3 種:

(1)sourcerecord 為null,即 不是由activity發出的啟動請求(launcher 或者adb start 啟動的activity)

(2)sourcerecord 的啟動模式為singleinstance

(3)要啟動的activity 的啟動模式為singleinstance 或singletask

滿足以上三個條件,啟動flags'中新增 flag_

3.將復用/新建的taskrecord 與activityrecord 關聯;

4.在ams 中更新task數量;

5.呼叫activitystack.startactivitylocked

1. 將要啟動的activityrecord 物件新增到mhistory 的適當位置,更新task 中activity 的計數,準備activity 的切換動畫;

2. 呼叫activitystack.resumetopactivitylocked

查詢當前棧頂是否有需要顯示的activity,沒有則啟動home桌面並返回;如果有需要顯示activity,就查詢當前是否需要暫停的activity

主要工作就是  :

暫停啟動目標activity 的源activity

此 階段 主要是建立目標activity 所執行的程序。

此時因為處於resume 狀態的 源activity 已經處於暫停狀態;

2.從activitystack.mhistory 中取出 第乙個非 finishing 狀態的activityrecord 

1.檢查ams.mprocessname 成員變數中是否已經存在制定的程序資訊(ams.mprocessname 這個陣列中存放這ams 中處理的程序的資訊2.呼叫ams.startprocesslocked  函式

1.根據procesname 來查詢ams 的成員變數mprocessname 中是否已經存在該程序對應的processrecord 物件(之前啟動過);

2.無 processname 對應的processrecord 物件,則會呼叫newprocessrecordlocked 方法建立目標activity對應的processrecord 程序,並且存放在ams.mprocessname 中;

3.呼叫ams.startprocesslocked

1.通過pkms 獲取當前應用程式的group_id

3,.此程序建立完了就擁有了自己的pid。

4.ams 會傳送乙個超時訊息(10s 或者 20s),超過此訊息後process.start 未完成,會觸發ams 的超時管理

Activity學習筆記

如果所寫內容有錯誤,歡迎提出,我會及時修改。1 standard 標準模式,也是系統的預設模式,該模式每次啟動都會在任務棧頂重新建立乙個activity例項。2 singletop 棧頂復用模式 在啟動activity時,如果被啟動的activity就是當前任務棧頂的activity,那麼會直接啟動...

activity流程筆記

之前遇到了乙個問題,在activity流程中不小心把乙個流程圖的表單的標識key,給弄丟了,同時舊流程圖又給刪除了,這個時候新的流程 就會載入到新部署的流程圖,但是舊的資料就查不到流程圖中的額 標識key 要保證兩個流程圖完全是一樣的只有引數不一樣,解決方法 1.首先我的form key 是在 ac...

在Activity中使用Menu

然後編輯該xml檔案 其中,每乙個item標籤就是選單中的乙個小項,android id屬性是該item的唯一標識,android title屬性是選單中顯示該項的文字。重寫此方法在activity中使用選單 override public boolean oncreateoptionsmenu m...