Android進(jìn)程管理機(jī)制及優(yōu)化forHTCHeRO_第1頁
Android進(jìn)程管理機(jī)制及優(yōu)化forHTCHeRO_第2頁
Android進(jìn)程管理機(jī)制及優(yōu)化forHTCHeRO_第3頁
Android進(jìn)程管理機(jī)制及優(yōu)化forHTCHeRO_第4頁
Android進(jìn)程管理機(jī)制及優(yōu)化forHTCHeRO_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Android 進(jìn)程管理機(jī)制及優(yōu)化 for HTC HeRO (其它設(shè)備也可參考) +自動內(nèi)存管理程序 理論Android 采取了一種有別于 Linux 的進(jìn)程管理策略,有別于 Linux 的在進(jìn)程活動停止后就結(jié) 束該進(jìn)程, Android 把這些進(jìn)程都保留在內(nèi)存中,直到系統(tǒng)需要更多內(nèi)存為止。這些保留在 內(nèi)存中的進(jìn)程通常情況下不會影響整體系統(tǒng)的運(yùn)行速度,并且當(dāng)用戶再次激活這些進(jìn)程時, 提升了進(jìn)程的啟動速度。那 Android 什么時候結(jié)束進(jìn)程?結(jié)束哪個進(jìn)程呢?之前普遍的認(rèn)識是 Android 是依據(jù)一個名 為 LRU( last recently used 最近使用過的程序) 列表,將程序進(jìn)行

2、排序, 并結(jié)束最早的進(jìn)程。 XDA 的樓主又進(jìn)一步對這個管理機(jī)制進(jìn)行研究,有了如下發(fā)現(xiàn):1系統(tǒng)會對進(jìn)程的重要性進(jìn)行評估,并將重要性以“ oom_adj這個數(shù)值表示出來,賦予各個進(jìn)程;(系統(tǒng)會根據(jù) “oom_adj來判斷需要結(jié)束哪些進(jìn)程,一般來說,“oom_adj的值越大,該進(jìn)程被系統(tǒng)選中終止的可能就越高)2前臺程序的“ oom_adj值為0,這意味著它不會被系統(tǒng)終止,一旦它不可訪問后,會獲得個 更高的“oom_adj”作者推測“oom_adj的值是根據(jù)軟件在 LRU列表中的位置所決定的;3. Android不同于Linux,有一套自己獨(dú)特的進(jìn)程管理模塊,這個模塊有更強(qiáng)的可定制性,可根據(jù)“oom

3、_adj'值的范圍來決定進(jìn)程管理策略,比如可以設(shè)定當(dāng)內(nèi)存小于X時,結(jié)束“ oom_adj大于Y的進(jìn)程”。這給了進(jìn)程管理腳本的編寫以更多的選擇。4. Android將進(jìn)程分為六大類:1. 前臺進(jìn)程(foreground):目前正在屏幕上顯示的進(jìn)程和一些系統(tǒng)進(jìn)程。舉例來說,Dialer Storage, Google Search 等系統(tǒng)進(jìn)程就是前臺進(jìn)程;再舉例來說,當(dāng)你運(yùn)行一個程序,如瀏覽器,當(dāng)瀏覽器界面在前臺顯示時,瀏覽器屬于前臺進(jìn)程(foreground ),但一旦你按home回到主界面,瀏覽器就變成了后臺程序(background )。我們最不希望終止的進(jìn)程就是前臺進(jìn)程。2. 可見

4、進(jìn)程( visible) :可見進(jìn)程是一些不再前臺,但用戶依然可見的進(jìn)程,舉個例來說:widget、輸入法等,都屬于visible。這部分進(jìn)程雖然不在前臺,但與我們的使用也密切相關(guān),我們也不希望它們被終止(你肯定不希望時鐘、天氣,新聞等widget 被終止,那它們將無法同步,你也不希望輸入法被終止,否則你每次輸入時都需要重新啟動輸入法)3. 次要服務(wù)(secondary server):目前正在運(yùn)行的一些服務(wù)(主要服務(wù),如撥號等,是不可能 被進(jìn)程管理終止的,故這里只談次要服務(wù)) ,舉例來說:谷歌企業(yè)套件, Gmail 內(nèi)部存儲, 聯(lián)系人內(nèi)部存儲等。 這部分服務(wù)雖然屬于次要服務(wù), 但很一些系統(tǒng)功

5、能依然息息相關(guān), 我們 時常需要用到它們,所以也太希望他們被終止4. 后臺進(jìn)程(hidden):雖然作者用了 hidden這個詞,但實(shí)際即是后臺進(jìn)程( backgrou nd), 就是我們通常意義上理解的啟動后被切換到后臺的進(jìn)程,如瀏覽器, 閱讀器等。 當(dāng)程序顯示 在屏幕上時,他所運(yùn)行的進(jìn)程即為前臺進(jìn)程 (foreground ),旦我們按home返回主界面(注 意是按home,不是按back),程序就駐留在后臺,成為后臺進(jìn)程( background ) 。后臺進(jìn)程的管理策略有多種:有較為積極的方式,一旦程序到達(dá)后臺立即 終止,這種方式會提高程序的運(yùn)行速度,但無法加速程序的再次啟動;也有較消極

6、的方式, 盡可能多的保留后臺程序, 雖然可能會影響到單個程序的運(yùn)行速度, 但在再次啟動已啟動的 程序時,速度會有所提升。這里就需要用戶根據(jù)自己的使用習(xí)慣找到一個平衡點(diǎn)5內(nèi)容供應(yīng)節(jié)點(diǎn)(content provider):沒有程序?qū)嶓w,進(jìn)提供內(nèi)容供別的程序去用的,比如日 歷供應(yīng)節(jié)點(diǎn),郵件供應(yīng)節(jié)點(diǎn)等。在終止進(jìn)程時,這類程序應(yīng)該有較高的優(yōu)先權(quán)6空進(jìn)程(empty):沒有任何東西在內(nèi)運(yùn)行的進(jìn)程,有些程序,比如 BTE,在程序退出后, 依然會在進(jìn)程中駐留一個空進(jìn)程, 這個進(jìn)程里沒有任何數(shù)據(jù)在運(yùn)行, 作用往往是提高該程序 下次的啟動速度或者記錄程序的一些歷史信息。這部分進(jìn)程無疑是應(yīng)該最先終止的。實(shí)踐說完理論

7、, 說些實(shí)踐的東西, 怎樣管理這六類進(jìn)程, 如何來設(shè)置進(jìn)程管理模塊是這部分說的 內(nèi)容。首先是軟件,推薦使用 MinFreeManager ,市場上就有下載,用于設(shè)置這六類進(jìn)程的管理策 略。軟件運(yùn)行后有六個輸入框, 在輸入框中只能輸入數(shù)字, 這些數(shù)字代表了這類進(jìn)程的處理策略, 比如 Foreground App 下的輸入框顯示 6,就表示, 當(dāng)可用內(nèi)存低于 6MB 時,終止 Foreground App。下面的類似,如 Empty App下的輸入框顯示24,則表示,當(dāng)內(nèi)存低于24MB時,終止 Empty App 。從 軟 件 數(shù) 值 的 設(shè) 置 不 難 看 出 結(jié) 束 進(jìn) 程 的 有 限 順 序

8、 : Empty>ContentProvider>Hidden>Secondary Server>Visible>Foreground 。但默認(rèn)設(shè)置確存在一些問題:各類進(jìn)程的管理策略的閥值相當(dāng)接近:6, 8, 16, 20, 22, 24,最大的相差也不到8MB,在實(shí)際程序運(yùn)行中,很容易導(dǎo)致多種類型的進(jìn)程同時被關(guān)閉。如可用內(nèi)存在25時,突然啟動照相程序,系統(tǒng)可用內(nèi)存急速,可能會導(dǎo)致空進(jìn)程、內(nèi)容供應(yīng)節(jié)點(diǎn)、后臺進(jìn)程、次要服務(wù) 等同時被關(guān)閉閥值上限較低:一般手機(jī)啟動后,可用內(nèi)存在 50-100 左右,但隨著手機(jī)的使用,可用內(nèi)存 會逐步減少,最后降低到 24MB 左右,則

9、系統(tǒng)開始啟動進(jìn)程管理機(jī)制,開始結(jié)束進(jìn)程,但 這個閥限制設(shè)在了 24MB ,相對來說偏低。其結(jié)果會導(dǎo)致系統(tǒng)使用一段時間后,整體速度變 慢。很明顯的就是,當(dāng)手機(jī)長時間使用后,開啟電話撥號,相冊,照相機(jī)等應(yīng)用時,系統(tǒng)的 反應(yīng)速度極慢?;谝陨蠋讉€問題,不難看出,我們修改的目標(biāo)也將非常明確,主要解決兩個矛盾: 拉開各進(jìn)程的閥值層次,使得進(jìn)程管理機(jī)制能更有效得工作 提升閥值上限,空出更多的空余內(nèi)存,以提升系統(tǒng)整體的運(yùn)行速度這部分的進(jìn)程管理策略要相進(jìn)程管理策略設(shè)置原則: 前臺進(jìn)程、 可見進(jìn)程和次要服務(wù)是與用戶體驗(yàn)息息相關(guān)的內(nèi)容, 對保守,給這些進(jìn)程留下足夠的運(yùn)行空間 壓榨無用進(jìn)程,騰出內(nèi)存空間給主要程序使

10、用下面筆者總結(jié)了幾種設(shè)置方式,適應(yīng)不同的使用需要: 游戲玩家/重度瀏覽器使用者配置:用戶特點(diǎn):長時間專注于某一特定的,高內(nèi)存需求的程序,對多任務(wù)的需求不高TTT; ) JI |/、配置參數(shù):1. Foreground : 62. Visible : 83.Secondary Server: 164. Hiden App : 805. Content Provider : 906. Empty:100配置理念: 壓榨后臺進(jìn)程, 內(nèi)容供應(yīng)節(jié)點(diǎn)和空進(jìn)程, 將內(nèi)存盡可能多得留給前臺進(jìn)程和系統(tǒng), 提升游戲速度和瀏覽器體驗(yàn)優(yōu)點(diǎn):程序啟動和運(yùn)行的速度最快 缺點(diǎn):多任務(wù)處理不理想,開啟程序較多時,后臺進(jìn)程會被

11、終止多任務(wù)配置: 用戶特點(diǎn):同時運(yùn)行多個應(yīng)用程序,需要經(jīng)常在多個程序間切換mtI ) j |/、配置參數(shù):1.Foreground : 62.Visible : 83.Secondary Server: 164.Hiden App : 205. Content Provider : 606. Empty:100配置理念:壓榨空進(jìn)程, 給內(nèi)容供應(yīng)節(jié)點(diǎn)留有一定空間, 最大限度提升后臺程序的使用空間, 提升多任務(wù)的處理能力 優(yōu)點(diǎn):運(yùn)行多個程序時,由于可支配內(nèi)存較多,后臺程序不容易被終止 缺點(diǎn):程序啟動的速度和整體系統(tǒng)的運(yùn)行速度可能會比游戲玩家配置略慢一些, 由于經(jīng)常運(yùn) 行多任務(wù),平時系統(tǒng)的響應(yīng)速度會

12、受到一定影響輕度用戶 /女生專用配置 用戶特點(diǎn):手機(jī)的主要功能是短信和電話,偶爾用用相機(jī)自拍TTT; ) JI |/、配置參數(shù):1.Foreground : 62.Visible : 83.Secondary Server: 164.Hiden App : 245. Content Provider : 326. Empty:48配置理念:壓榨空進(jìn)程, 給內(nèi)容供應(yīng)節(jié)點(diǎn)留有一定空間, 最大限度提升后臺程序的使用空間, 提升多任務(wù)的處理能力優(yōu)點(diǎn): 比較均衡的配置, 提升了系統(tǒng)的可用內(nèi)存, 使得系統(tǒng)的整體速度得到了提高,拉開了 各級進(jìn)程的管理策略層次,使得管理機(jī)制更有效率缺點(diǎn):比較均衡的配置,無明顯

13、缺點(diǎn)總結(jié)闡述完了內(nèi)存管理的機(jī)制, 并推薦了一些配置參數(shù), 但這些參數(shù)并不一定適用于所有人, 大 家也可以根據(jù)自己實(shí)際的使用習(xí)慣調(diào)整這些參數(shù)的設(shè)置。我們一直聽說 Android 是一個多進(jìn)程操作系統(tǒng) ,那么它是如何處理每一個進(jìn)程呢?大家可能已經(jīng)發(fā)現(xiàn) Android 自身并沒有所謂的關(guān)閉進(jìn)程的說法 每當(dāng)我們要退出一個進(jìn)程回 到桌面 /打開另一個程序的時候我們只能按"返回鍵 ". 而當(dāng)我們按下 "返回鍵 "后 ,該進(jìn)程并沒有真正的關(guān)閉 ,仍然保存在內(nèi)存中 . 這樣在下次調(diào)用的時候可以更快的打開該程序 .要想真正的關(guān)閉一個已打開的進(jìn)程,除了用第三方軟件(例如ad

14、vaneed task manager)夕卜,還有一個 ,那就是當(dāng) Android 系統(tǒng)認(rèn)為當(dāng)時已經(jīng)沒有足夠的內(nèi)存來運(yùn)行新的進(jìn)程,需要關(guān)閉一些雖然已經(jīng)開著 ,但是沒有用了 (具體怎樣一個進(jìn)程才會被 Android 系統(tǒng)認(rèn)為是 "沒有用 "下面就要 討論到 )的進(jìn)程 .而下面要研究的就是這個 Android 內(nèi)部的 lowmemorykiller.AetivityManagerServiee.java 記錄著每一個進(jìn)程的優(yōu)先級 . 一個進(jìn)程的 oom_adj 值也就代表了 它的優(yōu)先級 . oom_adj 值越高代表該進(jìn)程優(yōu)先級越低 . 一個正在使用的進(jìn)程的 oom_adj 值

15、為 0,一旦我們按下返回鍵 ,這個進(jìn)程就會得到一個更高的 oom_adj 值(更低的優(yōu)先級 ). 具體多少 取決于該進(jìn)程在 LRU(last reeently used) list 的位置 .(未證實(shí) ) 具體的細(xì)節(jié)保存在 Android 源文件 drivers/mise/lowmemorykiller.e 里.Android 將進(jìn)程分為 6個等級 ,它們按優(yōu)先級順序由高到低依次是:1. FOREGROUND_APP:This is the proeess running the eurrent foreground app. We'd really rather not kill i

16、t!用戶正在使用的程序 . 這個設(shè)的太高 ,用戶看到得就會是一個正在使用的程序莫名其妙的 消失了 ,然后自動回到桌面 .(因?yàn)樗幌到y(tǒng) kill 了.) 所以最好別動它 .2. VISIBLE_APP:This is a process only hosting activities that are visible to the user, so we'd prefer they don't disappear.8 b2 ; p5 N; S跟 FOREGROUND_APP 類似 ,用戶正在使用 /看得到 . 它們的區(qū)別就是 VISIBLE_APP 可 能不是用戶 focus

17、的程序 ,但是用戶看得到 ,或者沒有覆蓋到整個屏幕,只有屏幕的一部分 . 所以可以適當(dāng)?shù)谋?FOREGROUND_APP 高一點(diǎn) .3. SECONDARY_SERVER:This is a process holding a secondary server - killing it will not have much of an impact as far as the user is concerned.所有應(yīng)用的 service. 系統(tǒng)級的 service 比如 PhoneService 不屬于這類 , 它們是絕不會被 Android 結(jié)束掉的 . 所以這個可以適當(dāng)?shù)脑O(shè)高一點(diǎn)點(diǎn) 注意

18、, HOME(SenseUI) 也包括在這里 因此還是別設(shè)的太高要不每次返回桌面都得等它重新load,特別是widget多的.4. HIDDEN_APP:This is a process only hosting activities that are not visible, so it can be killed without any disruption.本來屬于1或者2的程序,在用戶按了 "back"或者"home"后,程序本身看不到了 ,但是其實(shí) 還在運(yùn)行的程序 ,它們就屬于 HIDDEN_APP 了. 干掉沒什么影響 . 不過要了解并不是

19、所有屬 于這一類的就應(yīng)該馬上結(jié)束掉,像 push mail,locale, 鬧鐘 ,等都屬于這一類 . 因此還是別設(shè)的過高. 真正 "應(yīng)該"一點(diǎn)返回鍵就退出的程序 (真正沒用的程序 )在下面 .5. CONTENT_PROVIDER:This is a process with a content provider that does not have any clients attached to it. If it did have any clients, its adjustment would be the one for the highest-priority

20、 of those processes.5,6 的區(qū)別具體不太了解 .這個也是用處不大 ,但是還是比 EMPTY_APP 稍微有點(diǎn)用 . 所 以高點(diǎn)沒關(guān)系 6. EMPTY_APP:This is a process without anything currently running in it. Definitely the first to go! This value is initalized in the constructor, careful when refering to this static variable externally. 完全沒用的一個 ,殺了它只有好處沒壞

21、處 ,第一個干它查看現(xiàn)在的設(shè)置可以 :1. # cat /sys/module/lowmemorykiller/parameters/minfree復(fù)制代碼 ' 顯示出的應(yīng)該是 6個數(shù)字 ,以逗號隔開 ,例如 : 1536,2048,4096,5120,5632,6144注意這些數(shù)字的單位是 page. 1 page = 4 kilobyte.;上面的六個數(shù)字對應(yīng)的就是 (MB): 6,8,16,20,22,24這些數(shù)字也就是對應(yīng)的內(nèi)存閥值 ,一旦低于該值 ,Android 便開始按順序關(guān)閉進(jìn)程 . 因此Android 開始結(jié)束優(yōu)先級最低的 EMPTY_APP 當(dāng)可用內(nèi)存小于 24MB(6144*4/1024).有一點(diǎn)沒搞明白,它的可用內(nèi)存不知道是從哪得到.明顯不是free顯示的可用內(nèi)存,而且貌似compcache跟 swap也不影響.要想重新設(shè)置該值:1.#echo"1536,2048,4096,5120,15360,23040">/sys/

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論