資源描述:
《ANDROID內(nèi)存管理原理.docx》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、ANDROID內(nèi)存管理原理我們一直聽說(shuō)Android是一個(gè)多進(jìn)程操作系統(tǒng),那么它是如何處理每一個(gè)進(jìn)程呢?:s/b*e.z1u??I2z3l6q(^3q大家可能已經(jīng)發(fā)現(xiàn)Android自身并沒有所謂的關(guān)閉進(jìn)程的說(shuō)法每當(dāng)我們要退出一個(gè)進(jìn)程回到桌面/打開另一個(gè)程序的時(shí)候我們只能按"返回鍵".而當(dāng)我們按下"返回鍵"后,該進(jìn)程并沒有真正的關(guān)閉,仍然保存在內(nèi)存中.這樣在下次調(diào)用的時(shí)候可以更快的打開該程序.要想真正的關(guān)閉一個(gè)已打開的進(jìn)程,除了用第三方軟件(例如advancedtaskmanager)外,還有一個(gè),那就是當(dāng)Android
2、系統(tǒng)認(rèn)為當(dāng)時(shí)已經(jīng)沒有足夠的內(nèi)存來(lái)運(yùn)行新的進(jìn)程,需要關(guān)閉一些雖然已經(jīng)開著,但是沒有用了(具體怎樣一個(gè)進(jìn)程才會(huì)被Android系統(tǒng)認(rèn)為是"沒有用"下面就要討論到)的進(jìn)程.而下面要研究的就是這個(gè)Android內(nèi)部的lowmemorykiller.ActivityManagerService.java記錄著每一個(gè)進(jìn)程的優(yōu)先級(jí).一個(gè)進(jìn)程的oom_adj值也就代表了它的優(yōu)先級(jí).oom_adj值越高代表該進(jìn)程優(yōu)先級(jí)越低.一個(gè)正在使用的進(jìn)程的oom_adj值為0,一旦我們按下返回鍵,這個(gè)進(jìn)程就會(huì)得到一個(gè)更高的oom_adj值(更低的優(yōu)
3、先級(jí)).具體多少取決于該進(jìn)程在LRU(lastrecentlyused)list的位置.(未證實(shí))具體的細(xì)節(jié)保存在Android源文件drivers/misc/lowmemorykiller.c里.Android將進(jìn)程分為6個(gè)等級(jí),它們按優(yōu)先級(jí)順序由高到低依次是:.R1.FOREGROUND_APP:1]#`;q%w:N'A5j7g??Thisistheprocessrunningthecurrentforegroundapp.??We'dreallyrathernotkillit!r用戶正在使用的程序.這個(gè)設(shè)的太高,
4、用戶看到得就會(huì)是一個(gè)正在使用的程序莫名其妙的消失了,然后自動(dòng)回到桌面..(因?yàn)樗幌到y(tǒng)kill了..)所以最好別動(dòng)它..'~9H!q9J,F!l"A??2.VISIBLE_APP::_%_)e0I???/V(`6K$zThisisaprocessonlyhostingactivitiesthatarevisibletotheuser,sowe'dprefertheydon'tdisappear.-K$[6],g'z6t??X跟FOREGROUND_APP類似,用戶正在使用/看得到.它們的區(qū)別就是VISIBLE_APP可
5、能不是用戶focus的程序,但是用戶看得到,或者沒有覆蓋到整個(gè)屏幕,只有屏幕的一部分.所以可以適當(dāng)?shù)谋菷OREGROUND_APP高一點(diǎn).#m7?(S9W2k1`)`*X:w5F'C?3.SECONDARY_SERVER:8p.g.G(Q2F?Thisisaprocessholdingasecondaryserver--killingitwillnothavemuchofanimpactasfarastheuserisconcerned.5F)H!B!M;~!s;N2i??所有應(yīng)用的service.系統(tǒng)級(jí)的servic
6、e比如PhoneService不屬于這類,它們是絕不會(huì)被Android結(jié)束掉的.所以這個(gè)可以適當(dāng)?shù)脑O(shè)高一點(diǎn)點(diǎn)~注意,HOME(SenseUI)也包括在這里因此還是別設(shè)的太高.要不每次返回桌面都得等它重新load,特別是widget多的..,
7、(Q,W3s/F3}%Y-k-i,H;v/f'f3P*f&l4.HIDDEN_APP:.TThisisaprocessonlyhostingactivitiesthatarenotvisible,soitcanbekilledwithoutanydisruption.;o"A5Y-
8、Q4!V)r;}??本來(lái)屬于1或者2的程序,在用戶按了"back"或者"home"后,程序本身看不到了,但是其實(shí)還在運(yùn)行的程序,它們就屬于HIDDEN_APP了.干掉沒什么影響..不過要了解并不是所有屬于這一類的就應(yīng)該馬上結(jié)束掉,像pushmail,locale,鬧鐘,等都屬于這一類.因此還是別設(shè)的過高.真正"應(yīng)該"一點(diǎn)返回鍵就退出的程序(真正沒用的程序)在下面.#^!T.q+b-M;g$g9?5.CONTENT_PROVIDER:Thisisaprocesswithacontentproviderthatdoesn
9、othaveanyclientsattachedtoit.??Ifitdidhaveanyclients,itsadjustmentwouldbetheoneforthehighest-priorityofthoseprocesses.#e0G7`!y4p5,6的區(qū)別具體不太了解..這個(gè)也是用處不大,但是還是比EMPTY_APP稍