AmS中的一些重要排程相關變數
AmS中的一些重要排程相關變數
要了解AmS排程、管理系統中的Activity的細節,必須瞭解AmS中定義的重要內部變數。要一下了解這些變數的使用時機並非易事,因此,本節僅簡要說明一些變數的作用,至於具體使用的時機,要結合排程的具體過程瞭解。
1.系統常量
— static final int MAX_ACTIVITIES = 20;
系統只能有一個Activity處於執行狀態,對於非執行狀態的Activity,AmS會在內部暫時快取起來,而不是立即殺死,但如果後臺的Activity數目超過該常量,則會強制殺死一些優先順序較低的Activity,所謂的“優先順序高低”的規則見第10.2節。
— static final int MAX_RECENT_TASKS = 20;
AmS會記錄最近啟動的Activity,但只記錄20個,超過該常量後,AmS會捨棄最早記錄的Activity。
— static final int PAUSE_TIMEOUT = 500;
當AmS通知應用程式暫停指定的Activity時,AmS的忍耐是有限的,因為只有500毫秒,如果應用程式在該常量時間內還沒有暫停,AmS會強制暫停關閉該Activity。這就是為什麼在應用程式設計時,不能在onPause()中做過多事情的原因。
— static final int LAUNCH_TIMEOUT = 10*1000;
當AmS通知應用程式啟動(Launch)某個Activity時,如果超過10s,AmS就會放棄。
— static final int PROC_START_TIMEOUT = 10*1000;
當AmS啟動某個客戶程式後,客戶程式必須在10秒之內報告AmS自己已經啟動,否則AmS會認為指定的客戶程式不存在。
2.等待序列
由於AmS採用Service機制運作,所有的客戶程式要做什麼事情,都要先請求AmS,因此,AmS內部必須有一些訊息序列儲存這些請求,並按順序依次進行相應的操作。
— final ArrayList mHistory = new ArrayList();
這是最最重要的內部變數,該變數儲存了所有正在執行的Activity,所謂正在執行是指該HistoryRecord的finishing狀態為true。比如當前和使用者互動的Activity屬於正在執行,從A1啟動到A2,儘管A1看不見了,但是依然是正在執行,從A2按“Home”鍵回到桌面,A2也是正在執行,但如果從A2按“Back”鍵回到A1,A2就不是正在執行狀態了,它會從mHistory中刪除掉。
— private final ArrayList mLRUActivities = new ArrayList();
LRU代表Latest Recent Used,即最近所用的Activity列表,它不像mHistory僅儲存正在執行的Activity,mLRUActivities會儲存所有過去啟動過的Activity。
— final ArrayList
當AmS內部還沒有準備好時,如果客戶程式請求啟動某個Activity,那麼會被暫時儲存到該變數中,這也就是Pending的含義。這種情況一般發生在系統啟動時,系統程式會查詢系統中所有屬性為Persisitant的客戶程式,此時由於AmS也正在啟動,因此,會暫時儲存這些請求。
— final ArrayList
在AmS的設計中,有這樣一個理念:優先啟動,其次再停止。即當使用者請求啟動A2時,如果A1正在執行,AmS首先會暫停A1,然後啟動A2,當A2啟動後再停止A1。在這個過程中,A1會被臨時儲存到mStoppingActivities中,知道A2啟動後並處於空閒時,再回過頭來停止mStoppingActivities中儲存的HistoryRecord列表。
— final ArrayList mFinishingActivities = new ArrayList();
和mStoppingActivities有點類似,當AmS認為某個Activity已經處於finish狀態時,不會立即殺死該Activity,而是會儲存到該變數中,直到超過系統設定的警戒線後,才去回收該變數中的Activity。
3.當前不同狀態的HistoryRecord
— HistoryRecord mPausingActivity = null;
正在暫停的Activity,該變數只有在暫停某個Activity時才有值,代表正在暫停的Activity。
— HistoryRecord mResumedActivity = null;
當前正在執行的Activity,這裡的正在執行並不見得一定是正在與使用者互動。比如當使用者請求執行A2時,當前正在執行A1,此時AmS會首先暫停A1,而在暫停的過程中,AmS會通知WmS暫停獲取使用者訊息,而此時mResumedActivity依然是A1。
— HistoryRecord mFocusedActivity = null;
這裡的Focus並非是正在和使用者互動,而是AmS通知WmS應該和使用者互動的Activity,而在WmS真正處理這個訊息之前,使用者還是不能和該Activity互動。
— HistoryRecord mLastPausedActivity = null;
上一次暫停的Activity。
本文選自《Android核心剖析 》一書
圖書詳細資訊:http://space.itpub.net/?uid-13164110-action-viewspace-itemid-708207
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-708305/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 7.排程相關
- MySQL中Redo Log相關的重要引數總結MySql
- 關於一些變數的使用變數
- Oracle優化相關的一些引數Oracle優化
- var_dump-列印變數的相關資訊變數
- 4.2.10.1 Oracle Restart 相關變數配置OracleREST變數
- [譯] React 中的排程React
- 與Linux檔案和目錄管理相關的一些重要命令Linux
- mysql 觸發器/過程中的變數!!MySql觸發器變數
- Android中關於外部儲存的一些重要函式Android函式
- #環境變數 相關的環境變數請複製過來,可能會和變數
- 數學建模 資料處理模型之變數相關性類(灰色相關聯、相關性分析)模型變數
- HP-UX crontab排程不會帶入環境變數UX變數
- 關於DSS中的繫結變數變數
- 關於批處理中的變數變數
- LVS - 相關介紹、工作模式和排程演算法的說明模式演算法
- 為什麼特徵相關性非常的重要?特徵
- c++任意變數型別獲取相關C++變數型別
- linux c 環境變數相關函式Linux變數函式
- Android中關於內部儲存的一些重要函式Android函式
- Android小知識-剖析Retrofit中ServiceMethod相關引數以及建立過程Android
- MySQL中的事件排程器EVENTMySql事件
- Linux CFS中的程式排程Linux
- 程序中的執行緒排程執行緒
- 聊聊Oracle Optimizer相關的幾個引數(中)Oracle
- Vue的一些相關面試題Vue面試題
- 一些與iphone相關的尺寸iPhone
- clickhouse的一些相關知識
- 關於Application型別的變數一些問題。APP型別變數
- mysql較為重要的狀態變數MySql變數
- Flink排程之排程器、排程策略、排程模式模式
- JavaScript變數,資料和記憶體的相關問題JavaScript變數記憶體
- 解讀數倉中的資料物件及相關關係物件
- 關於pl/sql中的繫結變數SQL變數
- 聊聊中後臺前端應用:模組相關的一些事前端
- 統計學三大相關係數之Pearson相關係數、Spearman相關係數
- 關於DDD學習過程中的一些疑問
- 數論相關