首頁>技術>

繼續上文updateOomAdjLocked函式的分析:

第158行:設定adj,applyOomAdjLocked函式實現如下↓統計cch程序數量和empty程序數量cch程序數量超過cch程序上限(16)則殺掉程序empty程序數量超過8且距離上次活躍時間超過30 minutes則殺掉程序empty程序數量超過empty程序上限(16)則殺掉程序

updateOomAdjLocked實現7

沒跑任何服務的孤立程序,殺掉剩下的全部活著,更新UID大於等於13的程序統計到numTrimming

updateOomAdjLocked實現8

numCached<=5 且 numEmpty<=8的情況:numCachedAndEmpty<=3,memFactor=3;numCachedAndEmpty<=5,memFactor=2;其他的情況memFactor=1numCached>5 或者 numEmpty>8的情況:memFactor = 0

updateOomAdjLocked實現9

第255~262行:當前記憶體因子大於上次記憶體級別情況下:如果記憶體因子級別禁止下降或者LRU佇列程序數量>=上次檢測時程序數量,則不允許記憶體因子繼續增大,仍使用上次的記憶體因子級別更新記憶體級別和程序數量設定記憶體因子

updateOomAdjLocked實現10

updateOomAdjLocked實現11

updateOomAdjLocked實現14

memFactor不等於ADJ_MEM_FACTOR_NORMAL(0)的情況下:memFactor=3,fgTrimLevel=15;memFactor=2,fgTrimLevel=10;memFactor=(1,0),fgTrimLevel=5;計算minFactor遍歷LRU程序佇列如果curProcState大於等於13且程序沒有被AM殺掉:trimMemoryLevel小於curLevel且不為空程序則執行TrimMemory操作如果curProcState等於10:trimMemoryLevel小於40且不為空程序則呼叫TrimMemory操作如果curProcState=(12、11和小於10):1.(curProcState>=7或者systemNoUi=true)且pendingUiClean=true:trimMemoryLevel小於20且不為空程序則執行TrimMemory操作; 2.如果trimMemoryLevel小於fgTrimLevel且不為空程序則執行TrimMemory操作memFactor等於ADJ_MEM_FACTOR_NORMAL(0)的情況下:如果(curProcState>=7或者systemNoUi=true)且pendingUiClean=true:trimMemoryLevel<20且不為空程序:則執行TrimMemory操作applyOomAdjLocked函式

applyOomAdjLocked實現1

第556行:更新需要設定的adj第563行:setOomAdj真正的設定程序adj

applyOomAdjLocked實現2

第573行:更新排程組第578行:當app標記waitingToKill,且沒有廣播接收器執行在該程序,並且排程組為後臺非互動組,則殺掉該程序,設定applyOomAdjLocked過程失敗第580~594行:schedGroup對應的processGroup第598行:設定程序組第600~613行:TOP APP的改變設定,優先順序設定更新repForegroundActivities和repProcStatePSS統計,計算nextPssTime

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 前端三大技術 HTML、CSS、JavaScript 快速入門手冊