1、基于Linux內(nèi)存管理
Android系統(tǒng)是基于Linux 2.6內(nèi)核開發(fā)的開源操作系統(tǒng),而linux系統(tǒng)的內(nèi)存管理有其獨(dú)特的動(dòng)態(tài)存儲(chǔ)管理機(jī)制。不過(guò)Android系統(tǒng)對(duì)Linux的內(nèi)存管理機(jī)制進(jìn)行了優(yōu)化,Linux系統(tǒng)會(huì)在進(jìn)程活動(dòng)停止后就結(jié)束該進(jìn)程,而Android把這些進(jìn)程都保留在內(nèi)存中,直到系統(tǒng)需要更多內(nèi)存為止。這些保留在內(nèi)存中的進(jìn)程通常情況下不會(huì)影響整體系統(tǒng)的運(yùn)行速度,并且當(dāng)用戶再次激活這些進(jìn)程時(shí),提升了進(jìn)程的啟動(dòng)速度。
2、Android內(nèi)存分配機(jī)制
與java的垃圾回收機(jī)制類似,系統(tǒng)有一個(gè)規(guī)則來(lái)回收內(nèi)存。進(jìn)行內(nèi)存調(diào)度有個(gè)閾值,只有低于這個(gè)值系統(tǒng)才會(huì)按一個(gè)列表來(lái)關(guān)閉用戶不需要的東西。Android系統(tǒng)有六類進(jìn)程:前臺(tái)進(jìn)程、可見進(jìn)程、次要服務(wù)、后臺(tái)進(jìn)程、內(nèi)容供應(yīng)節(jié)點(diǎn)、空進(jìn)程。有內(nèi)存管理需求的人可以用MinFreeManager之類的軟件進(jìn)行進(jìn)程管理,分別為六類進(jìn)程設(shè)定不同的閾值來(lái)操縱系統(tǒng)的內(nèi)存分配機(jī)制。不過(guò)對(duì)于一般用戶而言,Android系統(tǒng)默認(rèn)的分配機(jī)制已經(jīng)可以滿足使用需要,因此也不需要再去調(diào)整。
對(duì)于一些內(nèi)存很低的低端Android機(jī)而言,系統(tǒng)默認(rèn)的內(nèi)存分配機(jī)制無(wú)法實(shí)現(xiàn)很完善的內(nèi)存調(diào)配。所以在運(yùn)行大型游戲時(shí)需要先清理一下內(nèi)存。然而對(duì)于我們的ANDROID系統(tǒng)的手機(jī)而言,幾百m的總內(nèi)存和幾十m的空余內(nèi)存已經(jīng)可以充分的滿足系統(tǒng)自動(dòng)調(diào)配的需要,因此完全沒(méi)有必要老去殺進(jìn)程、清內(nèi)存。
有人認(rèn)為后臺(tái)掛著程序很費(fèi)電,事實(shí)上Android的應(yīng)用在被切換到后臺(tái)時(shí),它其實(shí)已經(jīng)被暫停了,并不會(huì)消耗cpu資源,只保留了運(yùn)行狀態(tài)。至于QQ、音樂(lè)播放之類的程序可以在后臺(tái)運(yùn)行,是因?yàn)檫@些程序在后臺(tái)開啟了服務(wù),而服務(wù)可以后臺(tái)運(yùn)行,所以沒(méi)有帶服務(wù)的應(yīng)用在后臺(tái)是完全不耗電的,沒(méi)有必要關(guān)閉。這種設(shè)計(jì)本來(lái)就是一個(gè)非常好的設(shè)計(jì),下次啟動(dòng)程序時(shí),會(huì)更快,因?yàn)椴恍枰x取界面資源。
Android系統(tǒng)這樣的設(shè)計(jì)不僅非常適合移動(dòng)終端的需要,而且減少了系統(tǒng)崩潰的可能,確保了系統(tǒng)的穩(wěn)定性。老想著清理內(nèi)存的同學(xué)完全是因?yàn)楸蝗嗷蛘遅indows毒害太深,事實(shí)上,經(jīng)常用Taskiller之類的軟件關(guān)閉后臺(tái)所有進(jìn)程,很容易造成系統(tǒng)的不穩(wěn)定。很多時(shí)候出現(xiàn)問(wèn)題,只要重啟就能解決,其原因也在于此。
總之,牛B的人自己去操縱系統(tǒng)內(nèi)存分配的閾值,普通用戶則是想怎么用就怎么用,完全不用去鳥剩余內(nèi)存的問(wèn)題,那些內(nèi)存清理的程序完全可以扔到一邊了。對(duì)于如果有同學(xué)真的那么喜歡看著自己手機(jī)的剩余ram很大的話,可以用autokiller之類的工具,這類工具的原理不是殺進(jìn)程,而是分配系統(tǒng)內(nèi)存閾值,很簡(jiǎn)單很好用。
3、手機(jī)慢的真正原因——CPU
在Android里,進(jìn)程和程序是兩回事,程序可以一直保留在系統(tǒng)里,但是沒(méi)有任何進(jìn)程在后臺(tái)“運(yùn)行”,也不消耗任何系統(tǒng)資源。所有的程序保留在內(nèi)存中,所有可以更快的啟動(dòng)回到它之前的狀態(tài)。當(dāng)你的內(nèi)存用完了,系統(tǒng)會(huì)自動(dòng)幫你殺掉你不用的任務(wù)。
需要明白的是,Android用RAM的方式,跟windows啥的是兩回事。在Android的世界里面,RAM被用滿了是件'好'事。它意味著你可以快速打開之前打開的軟件,回到之前的位置。所以Android很有效的使用RAM,很多用戶看到他們的RAM滿了,就認(rèn)為拖慢了他們的電話。而實(shí)際上,是你的CPU——當(dāng)你的軟件真正運(yùn)行時(shí)用到的東東——才是拖慢手機(jī)的瓶頸。
4、進(jìn)程管理軟件=禍害?
很流行的各種進(jìn)程管理軟件都說(shuō)幫你釋放內(nèi)存是件好事,但這是不正確的。打開這些軟件時(shí),他們告訴你“運(yùn)行”的軟件和殺死他們的方法。你也可以在“服務(wù)”里面看到到底程序的哪些部分在“運(yùn)行”,占用了多少內(nèi)存,剩余多少內(nèi)存。所有的這些都告訴你,殺掉這些程序能夠釋放內(nèi)存。但是這些軟件都沒(méi)有告訴你這些程序到底消耗了多少CPU時(shí)鐘,而僅僅告訴你能釋放多少內(nèi)存。要知道,用滿了內(nèi)存實(shí)際上是件好事,我們要注意的是CPU,真正消耗你的手機(jī)資源,消耗電池的東東。
因此,殺掉程序通常是沒(méi)有必要的(尤其是用"autokill"方式殺掉程序)。更嚴(yán)重的是,這樣做會(huì)更快的拖垮你的手機(jī)能力和電池性能。不管是手動(dòng)殺掉進(jìn)程,還是自動(dòng)的殺掉進(jìn)程,重新打開程序,你實(shí)際上是在用CPU資源來(lái)做這件事。
事實(shí)上,這些進(jìn)程管理軟件消耗了系統(tǒng)資源。而且,這些軟件會(huì)莫名其妙的殺死其他程序造成亂七八糟的結(jié)果(尤其對(duì)些小白來(lái)說(shuō))。所有的這些,告訴我們,你的手機(jī)在用它自己的方式工作,特別是你只是個(gè)小白用戶,用這些進(jìn)程管理軟件耽誤的事情比得到的要多。
5、善用快速啟動(dòng)
這么說(shuō)吧,各種程序開發(fā)水平是不一樣的。很多人以前或者現(xiàn)在使用這些進(jìn)程管理軟件,釋放內(nèi)存,感覺(jué)手機(jī)快了那么一點(diǎn)。造成這個(gè)問(wèn)題的原因是,你用的軟件本身程序?qū)懙锰珷€了,比如,有得程序完全沒(méi)有必要聯(lián)網(wǎng)時(shí),還在聯(lián)著。這個(gè)時(shí)候,殺掉這些程序,你能得到好處,就是說(shuō),只有你知道你在干什么得時(shí)候,殺掉讓你愛(ài)但是很爛的程序才能幫上你。
事實(shí)上,很多開發(fā)者,包括ROM開發(fā)者,如果用了進(jìn)程管理程序,當(dāng)你提交bug報(bào)告時(shí),看都不會(huì)看一眼(Cyanogen時(shí)這么干的,我不知道MIUI是不是),所以能不用就不要用了,除非你真的知道你在干什么。
如果你真關(guān)系你的手機(jī)的表現(xiàn)和進(jìn)程,還是多關(guān)注下系統(tǒng)進(jìn)程,看看里面說(shuō)各種程序都消耗了多少資源,如果某個(gè)程序消耗太多,時(shí)不時(shí)殺掉它可能會(huì)有那么一點(diǎn)幫助。
總的來(lái)說(shuō),進(jìn)程管理軟件正確的用途是殺那些出錯(cuò)的程序、會(huì)導(dǎo)致死機(jī)有BUG的進(jìn)程以及疑似病毒進(jìn)程等,而不是一味地追求內(nèi)存空得多程序在內(nèi)存里放著,CPU不調(diào)用,它就是死的,一般程序你退出了它就不再運(yùn)行了,不占用CPU資源(占用了CPU時(shí)間這個(gè)才是要耗電的),這就是2.2以上版本系統(tǒng)那個(gè)“快速啟動(dòng)”的工作原理。
6、再說(shuō)進(jìn)程管理
為什么內(nèi)存少的時(shí)候運(yùn)行大型程序會(huì)慢呢?其實(shí)很簡(jiǎn)單,在內(nèi)存剩余不多時(shí)打開大型程序,會(huì)觸發(fā)系統(tǒng)自身的調(diào)進(jìn)程調(diào)度策略,這是十分消耗系統(tǒng)資源的操作,特別是在一個(gè)程序頻繁向系統(tǒng)申請(qǐng)內(nèi)存的時(shí)候。這種情況下系統(tǒng)并不會(huì)關(guān)閉所有打開的進(jìn)程,而是選擇性關(guān)閉,頻繁的調(diào)度自然會(huì)拖慢系統(tǒng)。所以,論壇上有個(gè)更改內(nèi)存閥值的程序可以有一定改善。但改動(dòng)也可能帶來(lái)一些問(wèn)題,取決于值的設(shè)定。
那么,進(jìn)程管理軟件有無(wú)必要呢?有的。就是在運(yùn)行大型程序之前,你可以手動(dòng)關(guān)閉一些進(jìn)程釋放內(nèi)存,可以顯著的提高運(yùn)行速度。但一些小程序,完全可交由系統(tǒng)自己管理。談到這里,可能有的朋友會(huì)問(wèn),如果不關(guān)程序是不是會(huì)更耗電。我就說(shuō)說(shuō)安卓Android后臺(tái)的原理,你就明白了。安卓Android的應(yīng)用在被切換到后臺(tái)時(shí),它其實(shí)已經(jīng)被暫停了,并不會(huì)消耗cpu資源,只保留了運(yùn)行狀態(tài)。所以為什么有的程序切出去重進(jìn)會(huì)到主界面。但是,一個(gè)程序如果想要在后臺(tái)處理些東西,如音樂(lè)播放,它就會(huì)開啟一個(gè)服務(wù)。服務(wù)可在后臺(tái)持續(xù)運(yùn)行,所以在后臺(tái)耗電的也只有帶服務(wù)的應(yīng)用了。這個(gè)在進(jìn)程管理軟件里能看到,標(biāo)簽是service。所以沒(méi)有帶服務(wù)的應(yīng)用在后臺(tái)是完全不耗電的,沒(méi)有必要關(guān)閉。這種設(shè)計(jì)本來(lái)就是一個(gè)非常好的設(shè)計(jì),下次啟動(dòng)程序時(shí),會(huì)更快,因?yàn)椴恍枰x取界面資源,何必要關(guān)掉他們抹殺這個(gè)安卓Android的優(yōu)點(diǎn)呢?
7、內(nèi)存管理中的虛擬機(jī)
還有一個(gè)。為什么安卓Android一個(gè)應(yīng)用看起來(lái)那么耗內(nèi)存。大家知道,安卓Android上的應(yīng)用是java,當(dāng)然需要虛擬機(jī),而安卓Android上的應(yīng)用是帶有獨(dú)立虛擬機(jī)的,也就是每開一個(gè)應(yīng)用就會(huì)打開一個(gè)獨(dú)立的虛擬機(jī)。這樣設(shè)計(jì)的原因是可以避免虛擬機(jī)崩潰導(dǎo)致整個(gè)系統(tǒng)崩潰,但代價(jià)就是需要更多內(nèi)存。
以上這些設(shè)計(jì)確保了安卓Android的穩(wěn)定性,正常情況下最多單個(gè)程序崩潰,但整個(gè)系統(tǒng)不會(huì)崩潰,也永遠(yuǎn)沒(méi)有內(nèi)存不足的提示出現(xiàn)。大家可能是被windows毒害得太深了,總想保留更多的內(nèi)存,但實(shí)際上這并不一定會(huì)提升速度,相反卻喪失了程序啟動(dòng)快的這一系統(tǒng)特色,很沒(méi)必要。大家不妨按我說(shuō)的習(xí)慣來(lái)用用這個(gè)系統(tǒng)。最后推薦一款進(jìn)程管理軟件,systempanel,market上能搜到,界面友好啟動(dòng)快,功能也不錯(cuò),用于手動(dòng)關(guān)閉進(jìn)程很好的軟件。祝大家玩機(jī)愉快,這系統(tǒng)開十天半個(gè)月都沒(méi)問(wèn)題,不是windows。
8、HOME鍵和后退鍵
在運(yùn)行一個(gè)程序時(shí),按一下HOME鍵就可以退到桌面,一般來(lái)說(shuō)按一下退出鍵也可以退到桌面,這兩者有什么區(qū)別呢?
-
按HOME鍵,看起來(lái)似乎是退出了,但是其實(shí)這個(gè)軟件并沒(méi)有被關(guān)閉,而是轉(zhuǎn)為了后臺(tái)程序(指一般的軟件,不討論特別種類的軟件)
-
按退出鍵,看起來(lái)也是退出沒(méi)錯(cuò),但這個(gè)軟件其實(shí)是被轉(zhuǎn)為了空置程序(音樂(lè)除外,音樂(lè)屬于有服務(wù)的特殊軟件)
Android的所有5個(gè)程序進(jìn)程的級(jí)別高低,空進(jìn)程是最低的,它存在的目的是為了下次打開這個(gè)軟件的時(shí)候可以更加方便快速(這是個(gè)很好的設(shè)計(jì)目的),而一旦需要清理出更多內(nèi)存空間時(shí),它也是被系統(tǒng)自動(dòng)的最優(yōu)先清除的
所以,大家明白了吧?一旦需要退出軟件時(shí),如果是沒(méi)有提供退出功能的軟件,那么盡量用退出鍵退出而不是HOME鍵,并且,最重要的是,沒(méi)有必要用進(jìn)程管理類軟件主動(dòng)去清理空置進(jìn)程,因?yàn)樗緛?lái)就是為了被清理而存在,但在沒(méi)輪到它被清理之前,還可以發(fā)揮重新快速開啟的作用,一旦被你主動(dòng)清理了,就連這點(diǎn)好處都沒(méi)有了,那么,android系統(tǒng)的設(shè)計(jì)師又何必要設(shè)計(jì)出這個(gè)空置程序呢?直接釋放內(nèi)存不是更好么?所以,結(jié)論就是,既然它存在,就有它存在的好處!就要讓我們享受到這個(gè)好處!用進(jìn)程管理主動(dòng)去清除空置程序絕對(duì)是違反android系統(tǒng)的設(shè)計(jì)本意的,是一種可笑的傻做法!
8.1 HOME鍵
眾所周知,android跟iphone不同,咱們的gphone是一個(gè)典型的多任務(wù)系統(tǒng),既然是多任務(wù)系統(tǒng),那么自然就會(huì)有一個(gè)在多任務(wù)之間切換的需要,那么大家是否真的都會(huì)這個(gè)操作呢?
這時(shí)候,就需要用到HOME鍵了,在一個(gè)程序中的時(shí)候,比如短信息,看到幾個(gè)單詞不認(rèn)識(shí),那么就可以選中這段文字,然后復(fù)制,按HOME鍵切換到桌面,然后打開詞典,粘貼,查詢,查好后再長(zhǎng)按HOME鍵(長(zhǎng)按的作用是在幾個(gè)打開的程序和最近曾打開的程序之間切換),切換回短信息,這時(shí)候短信息程序不需要重新打開仍然是你剛才的界面,可以再?gòu)?fù)制然后長(zhǎng)按切換詞典繼續(xù)查詢下一個(gè)單詞。
這就是HOME鍵的用法,其實(shí)這是一個(gè)前后臺(tái)程序之間切換而已。
最后,簡(jiǎn)單的歸納一下所有內(nèi)容,其實(shí)整篇文章的意思就是說(shuō),按退出鍵相當(dāng)于“真正的”退出關(guān)閉程序,按HOME鍵,看起來(lái)似乎是關(guān)閉了程序,但是其實(shí)只是一種假象,程序只是被降低了僅僅“一”個(gè)等級(jí)而已,HOME更適合多任務(wù)切換用,就這么簡(jiǎn)單。
8.2 應(yīng)用
-
按home退出,程序保留狀態(tài)為后臺(tái)進(jìn)程;按返回鍵退出,程序保留狀態(tài)為空進(jìn)程。空進(jìn)程的oom_adj評(píng)值高于后臺(tái)進(jìn)程,更容易被系統(tǒng)清理。所以推薦用返回鍵退出。
-
UC、憤怒小鳥、都市賽車之類程序本身提供關(guān)閉功能的,還是盡量主動(dòng)關(guān)閉。瀏覽器、電子市場(chǎng)、opera mini等不提供關(guān)閉功能的,直接返回鍵退出就行。
9、獨(dú)特的進(jìn)程管理策略
Android采取了一種有別于Linux的進(jìn)程管理策略,有別于Linux的在進(jìn)程活動(dòng)停止后就結(jié)束該進(jìn)程,Android把這些進(jìn)程都保留在內(nèi)存中,直到系統(tǒng)需要更多內(nèi)存為止。這些保留在內(nèi)存中的進(jìn)程通常情況下不會(huì)影響整體系統(tǒng)的運(yùn)行速度,并且當(dāng)用戶再次激活這些進(jìn)程時(shí),提升了進(jìn)程的啟動(dòng)速度。
那Android什么時(shí)候結(jié)束進(jìn)程?結(jié)束哪個(gè)進(jìn)程呢?之前普遍的認(rèn)識(shí)是Android是依據(jù)一個(gè)名為L(zhǎng)RU(last recently used最近使用過(guò)的程序)列表,將程序進(jìn)行排序,并結(jié)束最早的進(jìn)程。XDA的樓主又進(jìn)一步對(duì)這個(gè)管理機(jī)制進(jìn)行研究,有了如下發(fā)現(xiàn):
-
系統(tǒng)會(huì)對(duì)進(jìn)程的重要性進(jìn)行評(píng)估,并將重要性以“oom_adj”這個(gè)數(shù)值表示出來(lái),賦予各個(gè)進(jìn)程;(系統(tǒng)會(huì)根據(jù)“oom_adj”來(lái)判斷需要結(jié)束哪些進(jìn)程,一般來(lái)說(shuō),“oom_adj”的值越大,該進(jìn)程被系統(tǒng)選中終止的可能就越高)
-
前臺(tái)程序的“oom_adj”值為0,這意味著它不會(huì)被系統(tǒng)終止,一旦它不可訪問(wèn)后,會(huì)獲得個(gè)更高的“oom_adj”,作者推測(cè)“oom_adj”的值是根據(jù)軟件在LRU列表中的位置所決定的;
-
Android不同于Linux,有一套自己獨(dú)特的進(jìn)程管理模塊,這個(gè)模塊有更強(qiáng)的可定制性,可根據(jù)“oom_adj”值的范圍來(lái)決定進(jìn)程管理策略,比如可以設(shè)定“當(dāng)內(nèi)存小于X時(shí),結(jié)束“oom_adj”大于Y的進(jìn)程”。這給了進(jìn)程管理腳本的編寫以更多的選擇。
-
Android將進(jìn)程進(jìn)行了分類:
● 前臺(tái)進(jìn)程(foreground):目前正在屏幕上顯示的進(jìn)程和一些系統(tǒng)進(jìn)程。舉例來(lái)說(shuō),Dialer Storage,GoogleSearch等系統(tǒng)進(jìn)程就是前臺(tái)進(jìn)程;再舉例來(lái)說(shuō),當(dāng)你運(yùn)行一個(gè)程序,如瀏覽器,當(dāng)瀏覽器界面在前臺(tái)顯示時(shí),瀏覽器屬于前臺(tái)進(jìn)程(foreground),但一旦你按home回到主界面,瀏覽器就變成了后臺(tái)程序(background)。我們最不希望終止的進(jìn)程就是前臺(tái)進(jìn)程。
● 可見進(jìn)程(visible):可見進(jìn)程是一些不再前臺(tái),但用戶依然可見的進(jìn)程,舉個(gè)例來(lái)說(shuō):widget、輸入法等,都屬于visible。這部分進(jìn)程雖然不在前臺(tái),但與我們的使用也密切相關(guān),我們也不希望它們被終止(你肯定不希望時(shí)鐘、天氣,新聞等widget被終止,那它們將無(wú)法同步,你也不希望輸入法被終止,否則你每次輸入時(shí)都需要重新啟動(dòng)輸入法)
● 次要服務(wù)(secondary server):目前正在運(yùn)行的一些服務(wù)(主要服務(wù),如撥號(hào)等,是不可能被進(jìn)程管理終止的,故這里只談次要服務(wù)),舉例來(lái)說(shuō):谷歌企業(yè)套件,Gmail內(nèi)部存儲(chǔ),聯(lián)系人內(nèi)部存儲(chǔ)等。這部分服務(wù)雖然屬于次要服務(wù),但很一些系統(tǒng)功能依然息息相關(guān),我們時(shí)常需要用到它們,所以也太希望他們被終止
● 后臺(tái)進(jìn)程(hidden):雖然作者用了hidden這個(gè)詞,但實(shí)際即是后臺(tái)進(jìn)程(background),就是我們通常意義上理解的啟動(dòng)后被切換到后臺(tái)的進(jìn)程,如瀏覽器,閱讀器等。當(dāng)程序顯示在屏幕上時(shí),他所運(yùn)行的進(jìn)程即為前臺(tái)進(jìn)程(foreground),一旦我們按home返回主界面(注意是按home,不是按back),程序就駐留在后臺(tái),成為后臺(tái)進(jìn)程(background)。后臺(tái)進(jìn)程的管理策略有多種:有較為積極的方式,一旦程序到達(dá)后臺(tái)立即終止,這種方式會(huì)提高程序的運(yùn)行速度,但無(wú)法加速程序的再次啟動(dòng);也有較消極的方式,盡可能多的保留后臺(tái)程序,雖然可能會(huì)影響到單個(gè)程序的運(yùn)行速度,但在再次啟動(dòng)已啟動(dòng)的程序時(shí),速度會(huì)有所提升。這里就需要用戶根據(jù)自己的使用習(xí)慣找到一個(gè)平衡點(diǎn)
●內(nèi)容供應(yīng)節(jié)點(diǎn)(content provider):沒(méi)有程序?qū)嶓w,進(jìn)提供內(nèi)容供別的程序去用的,比如日歷供應(yīng)節(jié)點(diǎn),郵件供應(yīng)節(jié)點(diǎn)等。在終止進(jìn)程時(shí),這類程序應(yīng)該有較高的優(yōu)先權(quán)
●空進(jìn)程(empty):沒(méi)有任何東西在內(nèi)運(yùn)行的進(jìn)程,有些程序,比如BTE,在程序退出后,依然會(huì)在進(jìn)程中駐留一個(gè)空進(jìn)程,這個(gè)進(jìn)程里沒(méi)有任何數(shù)據(jù)在運(yùn)行,作用往往是提高該程序下次的啟動(dòng)速度或者記錄程序的一些歷史信息。這部分進(jìn)程無(wú)疑是應(yīng)該最先終止的。
10、極端情況
至于為什么開了大程序或者開了好幾個(gè)程序之后切換會(huì)變慢,我的理解如下:
-
大程序A已經(jīng)開啟,占用70%內(nèi)存,如果再想運(yùn)行一個(gè)B,需要50%的內(nèi)存,則就需要一個(gè)將A從內(nèi)存中釋放或者壓縮的過(guò)程,所以表現(xiàn)出來(lái)的就是慢一會(huì)兒
-
A\B\C\D\E共占用內(nèi)存80%,運(yùn)行新程序Z需要20%的內(nèi)存,系統(tǒng)內(nèi)存因?yàn)闆](méi)見過(guò)剩余0的時(shí)候,也就是應(yīng)該剩一部分空閑內(nèi)存,那么就需要從A~E這幾個(gè)程序中選擇一個(gè)或者幾個(gè)來(lái)關(guān)閉,這一過(guò)程也需要耗費(fèi)系統(tǒng)資源,所以會(huì)慢一會(huì)兒
-
也就是說(shuō)你手動(dòng)去殺程序的時(shí)候,就是替系統(tǒng)在釋放內(nèi)存,就算你不殺,在需要內(nèi)存的時(shí)候系統(tǒng)也會(huì)自動(dòng)釋放。
-
不在后臺(tái)運(yùn)行的程序(沒(méi)服務(wù)的),即使不殺也不會(huì)耗電。在后臺(tái)運(yùn)行的(有服務(wù)的)程序,如后臺(tái)放歌,當(dāng)然會(huì)耗電。
-
不是說(shuō)殺進(jìn)程沒(méi)用,不然作者就不會(huì)推薦進(jìn)程管理軟件了。哪個(gè)帶服務(wù)耗電哪個(gè)后臺(tái)一直在運(yùn)行,看服務(wù)就能看出來(lái),這樣的該殺。
-
以qq舉例,正常的退,會(huì)在進(jìn)程管理里留下qq的運(yùn)行狀態(tài),但不耗電不占cpu,如果你只是切換出去(按HOME而不是退出)那么自然會(huì)耗電,因?yàn)槌绦蜻€在運(yùn)行。(qq后臺(tái)一樣后臺(tái)就是qq正常退出的時(shí)候和別的軟件一樣不完全退出會(huì)在內(nèi)存里留著但是不占cpu不費(fèi)電再次啟動(dòng)就會(huì)非常快了這就是為什么android能超越WM6的系統(tǒng)的原因)
11、MinFreeManager的使用
進(jìn)程管理,推薦使用MinFreeManager,市場(chǎng)上就有下載,用于設(shè)置這六類進(jìn)程的管理策略。
軟件運(yùn)行后有六個(gè)輸入框,在輸入框中只能輸入數(shù)字,這些數(shù)字代表了這類進(jìn)程的處理策略,比如Foreground App下的輸入框顯示6,就表示,當(dāng)可用內(nèi)存低于6MB時(shí),終止Foreground App。下面的類似,如Empty App下的輸入框顯示24,則表示,當(dāng)內(nèi)存低于24MB時(shí),終止Empty App。
從軟件數(shù)值的設(shè)置不難看出結(jié)束進(jìn)程的有限順序:Empty > Content Provider > Hidden > Secondary Server > Visible > Foreground。
11.1 默認(rèn)設(shè)置存在的一些問(wèn)題:
各類進(jìn)程的管理策略的閥值相當(dāng)接近:6,8,16,20,22,24,最大的相差也不到8MB,在實(shí)際程序運(yùn)行中,很容易導(dǎo)致多種類型的進(jìn)程同時(shí)被關(guān)閉。如可用內(nèi)存在25時(shí),突然啟動(dòng)照相程序,系統(tǒng)可用內(nèi)存急速,可能會(huì)導(dǎo)致空進(jìn)程、內(nèi)容供應(yīng)節(jié)點(diǎn)、后臺(tái)進(jìn)程、次要服務(wù)等同時(shí)被關(guān)閉閥值上限較低:一般手機(jī)啟動(dòng)后,可用內(nèi)存在50-100左右,但隨著手機(jī)的使用,可用內(nèi)存會(huì)逐步減少,最后降低到24MB左右,則系統(tǒng)開始啟動(dòng)進(jìn)程管理機(jī)制,開始結(jié)束進(jìn)程,但這個(gè)閥限制設(shè)在了24MB,相對(duì)來(lái)說(shuō)偏低。其結(jié)果會(huì)導(dǎo)致系統(tǒng)使用一段時(shí)間后,整體速度變慢。很明顯的就是,當(dāng)手機(jī)長(zhǎng)時(shí)間使用后,開啟電話撥號(hào),相冊(cè),照相機(jī)等應(yīng)用時(shí),系統(tǒng)的反應(yīng)速度極慢。
11.2 解決兩個(gè)矛盾:
-
拉開各進(jìn)程的閥值層次,使得進(jìn)程管理機(jī)制能更有效得工作
-
提升閥值上限,空出更多的空余內(nèi)存,以提升系統(tǒng)整體的運(yùn)行速度
11.3 進(jìn)程管理策略設(shè)置原則:
-
前臺(tái)進(jìn)程、可見進(jìn)程和次要服務(wù)是與用戶體驗(yàn)息息相關(guān)的內(nèi)容,這部分的進(jìn)程管理策略要相對(duì)保守,給這些進(jìn)程留下足夠的運(yùn)行空間
-
壓榨無(wú)用進(jìn)程,騰出內(nèi)存空間給主要程序使用
11.4適應(yīng)不同的使用需要的幾種設(shè)置方式
11.4.1 游戲玩家/重度瀏覽器使用者配置:
用戶特點(diǎn):長(zhǎng)時(shí)間專注于某一特定的,高內(nèi)存需求的程序,對(duì)多任務(wù)的需求不高
配置參數(shù):
Foreground:6Visible:8Secondary Server:16Hiden App:80Content Provider:90Empty:100
配置理念:壓榨后臺(tái)進(jìn)程,內(nèi)容供應(yīng)節(jié)點(diǎn)和空進(jìn)程,將內(nèi)存盡可能多得留給前臺(tái)進(jìn)程和系統(tǒng),提升游戲速度和瀏覽器體驗(yàn)
優(yōu)點(diǎn):程序啟動(dòng)和運(yùn)行的速度最快
缺點(diǎn):多任務(wù)處理不理想,開啟程序較多時(shí),后臺(tái)進(jìn)程會(huì)被終止
11.4.2 多任務(wù)配置:
用戶特點(diǎn):同時(shí)運(yùn)行多個(gè)應(yīng)用程序,需要經(jīng)常在多個(gè)程序間切換
配置參數(shù):
Foreground:6Visible:8Secondary Server:16Hiden App:20Content Provider:60Empty:100
配置理念:壓榨空進(jìn)程,給內(nèi)容供應(yīng)節(jié)點(diǎn)留有一定空間,最大限度提升后臺(tái)程序的使用空間,提升多任務(wù)的處理能力
優(yōu)點(diǎn):運(yùn)行多個(gè)程序時(shí),由于可支配內(nèi)存較多,后臺(tái)程序不容易被終止
缺點(diǎn):程序啟動(dòng)的速度和整體系統(tǒng)的運(yùn)行速度可能會(huì)比游戲玩家配置略慢一些,由于經(jīng)常運(yùn)行多任務(wù),平時(shí)系統(tǒng)的響應(yīng)速度會(huì)受到一定影響
11.4.3 輕度用戶/女生專用配置
用戶特點(diǎn):手機(jī)的主要功能是短信和電話,偶爾用用相機(jī)自拍
配置參數(shù):
Foreground:6Visible:8Secondary Server:16Hiden App:24Content Provider:32Empty:48
配置理念:壓榨空進(jìn)程,給內(nèi)容供應(yīng)節(jié)點(diǎn)留有一定空間,最大限度提升后臺(tái)程序的使用空間,提升多任務(wù)的處理能力
優(yōu)點(diǎn):比較均衡的配置,提升了系統(tǒng)的可用內(nèi)存,使得系統(tǒng)的整體速度得到了提高,拉開了各級(jí)進(jìn)程的管理策略層次,使得管理機(jī)制更有效率
缺點(diǎn):比較均衡的配置,無(wú)明顯缺點(diǎn)
12、總結(jié)
12.1 快速啟動(dòng)
有著良好windows操作習(xí)慣,而又不了解Android內(nèi)存管理機(jī)制的人,在使用Android系統(tǒng)的時(shí)候,會(huì)很在意系統(tǒng)的內(nèi)存資源使用情況——去頻頻清除那些不使用而常駐內(nèi)存的程序(進(jìn)程),這樣就會(huì)忽略掉android的一個(gè)獨(dú)特的優(yōu)點(diǎn),進(jìn)而在不知情的情況下白白消耗寶貴的手機(jī)資源。
手機(jī)資源的寶貴,在于它的CPU,在于它的電量。不使用而常駐內(nèi)存的進(jìn)程,一般以后臺(tái)進(jìn)程和空進(jìn)程的形式存在內(nèi)存中(QQ、音樂(lè)播放等是開啟了service,不同于這一情況),是不會(huì)消耗CPU和電量的,相反常駐內(nèi)存有個(gè)顯著的長(zhǎng)處,是程序在不重復(fù)消耗資源的情況下獲得了快速啟動(dòng),這是Android獨(dú)特的進(jìn)程管理特點(diǎn)。
而頻頻用進(jìn)程管理軟件主動(dòng)清除后臺(tái)和空進(jìn)程是要消耗資源的,而進(jìn)程的關(guān)閉和開啟也要消耗相應(yīng)的資源,簡(jiǎn)單說(shuō)來(lái),這就是用一個(gè)資源消耗的動(dòng)作去實(shí)現(xiàn)另一個(gè)資源消耗的動(dòng)作,最終導(dǎo)致重啟程序時(shí)第三個(gè)資源消耗動(dòng)作的發(fā)生。
12.2 HOME鍵和退出鍵
-
按HOME鍵,程序轉(zhuǎn)入后臺(tái)進(jìn)程;
-
按退出鍵,程序直接轉(zhuǎn)入空進(jìn)程;
-
此時(shí)進(jìn)程獲得了快速啟動(dòng)的功能,而不消耗任何資源
12.3 Android的進(jìn)程管理機(jī)制
那是不是將程序全部以后臺(tái)和空進(jìn)程的形式常駐內(nèi)存就會(huì)將快速啟動(dòng)這一優(yōu)點(diǎn)發(fā)揮到最大?
不是的,技術(shù)的進(jìn)步,內(nèi)存再大也是有限的,這就得說(shuō)到內(nèi)存管理的另一個(gè)機(jī)制——進(jìn)程管理。進(jìn)程按照優(yōu)先級(jí)分為五類:前臺(tái)進(jìn)程、可見進(jìn)程、服務(wù)進(jìn)程、后臺(tái)進(jìn)程、空進(jìn)程,從左往右優(yōu)先級(jí)的值依次遞增,當(dāng)內(nèi)存緊張時(shí),那么進(jìn)程管理機(jī)制就會(huì)根據(jù)優(yōu)先級(jí)的值,從高到低依次關(guān)閉,空進(jìn)程->后臺(tái)進(jìn)程->可見進(jìn)程->服務(wù)進(jìn)程->前臺(tái)進(jìn)程,從此可見,那么對(duì)空進(jìn)程和后臺(tái)進(jìn)程會(huì)消耗內(nèi)存資源的擔(dān)憂可以緩一緩了,因?yàn)楹笈_(tái)和空進(jìn)程的狀態(tài)從另一面來(lái)說(shuō)也可以理解為“準(zhǔn)備關(guān)閉“的進(jìn)程。
如此,我們就可將一般的軟件交給進(jìn)程管理機(jī)制自身進(jìn)行管理就好了
12.4 進(jìn)程管理軟件
Android進(jìn)程管理機(jī)制如此智能,但相應(yīng)的軟件作為工具的存在還是有著自身的價(jià)值。
-
大量需要內(nèi)存當(dāng)我們可預(yù)見的需要大量?jī)?nèi)存,如開啟一個(gè)消耗內(nèi)存的進(jìn)程(游戲)、或某一時(shí)刻開啟大量的進(jìn)程時(shí),如果這時(shí)還交由進(jìn)程管理機(jī)制來(lái)處理,那么就會(huì)導(dǎo)致機(jī)制頻繁的檢查剩余內(nèi)存、關(guān)閉進(jìn)程、開啟新進(jìn)程這一流程,這時(shí)不明智的。我們可以做的是,事先使用進(jìn)程管理軟件,將要使用的內(nèi)存一次性清理出來(lái),再來(lái)開啟相應(yīng)的進(jìn)程。
-
不良軟件除開上述情況,還有一種情況是,面對(duì)不良軟件,即在后臺(tái)運(yùn)行也開啟消耗資源,如彈窗、耗電、走流量等服務(wù)進(jìn)程,而在某一時(shí)段又不便卸載的情況下,進(jìn)程管理軟件也能體現(xiàn)相應(yīng)的價(jià)值。
12.5 開發(fā)者選項(xiàng)中的內(nèi)存管理功能
Android手機(jī)都存在這一功能,里面有著幾項(xiàng)與內(nèi)存管理相關(guān)的選項(xiàng):
-
不保留活動(dòng):對(duì)activity進(jìn)程的限制;
-
后臺(tái)進(jìn)程限制:名字很是直白,這一功能能在一定程度上解決12.4中的問(wèn)題,但是還是那句話禁用后臺(tái)進(jìn)程的話本身就是禁掉了Android系統(tǒng)本身的特色——快速啟動(dòng);
-
系統(tǒng)內(nèi)存優(yōu)化級(jí)別:對(duì)后臺(tái)進(jìn)程的壓縮程度,越是高級(jí)壓縮越厲害,但相應(yīng)的程序之間的切換也越容易卡,而且壓縮本身也是一個(gè)消耗資源的過(guò)程。所以如果程序之間切換較為頻繁,可禁用這一功能,但是如果有長(zhǎng)時(shí)玩單一游戲的習(xí)慣的話,可以依照自身程序切換頻率設(shè)置相當(dāng)?shù)募?jí)別。
-
Android
+關(guān)注
關(guān)注
12文章
3947瀏覽量
128459 -
Linux
+關(guān)注
關(guān)注
87文章
11373瀏覽量
211293 -
內(nèi)存管理
+關(guān)注
關(guān)注
0文章
168瀏覽量
14271
原文標(biāo)題:Android內(nèi)存管理機(jī)制
文章出處:【微信號(hào):Imgtec,微信公眾號(hào):Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Linux的內(nèi)存管理是什么,Linux的內(nèi)存管理詳解

走進(jìn)Linux內(nèi)存系統(tǒng)探尋內(nèi)存管理的機(jī)制和奧秘
關(guān)于Linux內(nèi)存管理的詳細(xì)介紹
Linux內(nèi)核的內(nèi)存管理詳解

Linux內(nèi)核內(nèi)存管理之ZONE內(nèi)存分配器
Linux內(nèi)存系統(tǒng): Linux 內(nèi)存分配算法
Linux內(nèi)存管理中的Slab分配機(jī)制
linux內(nèi)存管理機(jī)制淺析

Android內(nèi)存管理機(jī)制與分析工具
你知道linux內(nèi)存管理基礎(chǔ)及方法?
淺析物理內(nèi)存與虛擬內(nèi)存的關(guān)系及其管理機(jī)制

Linux內(nèi)存管理的詳細(xì)介紹分享

jemalloc分配機(jī)制的介紹及其優(yōu)化實(shí)踐

Linux 內(nèi)存管理總結(jié)

評(píng)論