安卓是基于Linux系統(tǒng)開發(fā)出來的,這點(diǎn)非常的重要,因?yàn)槲蚁嘈庞泻芏嗳,甚至一些高手?huì)忽視這一點(diǎn)而陷入了一個(gè)誤區(qū),什么誤區(qū)呢?就是手動(dòng)關(guān)閉成尋,追求更大的剩余內(nèi)存。我們已經(jīng)習(xí)慣Windows的系統(tǒng),習(xí)慣了空余內(nèi)存更大運(yùn)行更快的概念。 大家在使用安卓手機(jī)時(shí)也會(huì)保持著這個(gè)概念。常常手動(dòng)關(guān)閉程序以節(jié)約內(nèi)存。其實(shí)大可不必。作為安卓系統(tǒng),或者說Linux系統(tǒng),它與Windows系統(tǒng)是兩個(gè)完全不同的系統(tǒng),所以他們?cè)趦?nèi)存上的看待是完全不一樣的。安卓大多應(yīng)用沒有退出的設(shè)計(jì)其實(shí)是有道理的,這和系統(tǒng)對(duì)進(jìn)程的調(diào)度機(jī)制有關(guān)系。
如果大家知道Java的話,就能更清楚這機(jī)制了,因?yàn)镴ava本身有個(gè)垃圾回收機(jī)制。和Java的垃圾回收機(jī)制類似,安卓系統(tǒng)有一個(gè)規(guī)則來回收內(nèi)存。進(jìn)行內(nèi)存調(diào)度有個(gè)閥值,只有低于這個(gè)值系統(tǒng)才會(huì)按一個(gè)列表來關(guān)閉用戶不需要的東西。當(dāng)然這個(gè)值默認(rèn)設(shè)置得很小,所以你會(huì)看到內(nèi)存老在很少的數(shù)值徘徊。但事實(shí)上它并不影響速度。相反加快了下次啟動(dòng)應(yīng)用的速度。這本來就是安卓標(biāo)榜的優(yōu)勢(shì)之一。
如果人為去關(guān)閉進(jìn)程,沒有太大必要,特別是使用自動(dòng)關(guān)進(jìn)程的軟件。(這就是我所說的為什么不需要手動(dòng)關(guān)閉進(jìn)程了。而且我相信作為一個(gè)穩(wěn)定的系統(tǒng),本身各個(gè)數(shù)值的設(shè)置應(yīng)該已經(jīng)是最均衡的,所以沒有必要一味追求數(shù)值的大小,夠用即可。)
那大家可能會(huì)問了,那為什么內(nèi)存少的時(shí)候運(yùn)行大型程序會(huì)慢呢?這其實(shí)很簡單,在內(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)。(這就是為什么大型程序剛開始啟動(dòng)時(shí)很慢,但到后來逐漸恢復(fù)正常速度的原因。當(dāng)然調(diào)整的時(shí)間還要看機(jī)子的好壞。)
那么,進(jìn)程管理軟件有無必要呢?有必要的。就是在運(yùn)行大型程序之前,你可以手動(dòng)關(guān)閉一些進(jìn)程釋放內(nèi)存,可以顯著的提高運(yùn)行速度。但一些小程序,完全可交由系統(tǒng)自己管理。有人可能又會(huì)問了,如果不關(guān)程序是不是會(huì)更耗電。
還有網(wǎng)友關(guān)注會(huì)不會(huì)費(fèi)流量。我說說安卓后臺(tái)的原理,大家就明白了。安卓的應(yīng)用在被切換到后臺(tái)時(shí),它其實(shí)已經(jīng)被暫停了,并不會(huì)消耗cpu資源,只保留了運(yùn)行狀態(tài),耗電不大不費(fèi)流量。(這個(gè)就是為什么我們把有的程序切出去后,再重進(jìn)該程序時(shí),還是會(huì)到程序的主界面)。
但是,一個(gè)程序如果想要在后臺(tái)處理些東西,如音樂播放,它就會(huì)開啟一個(gè)服務(wù)。服務(wù)可在后臺(tái)持續(xù)運(yùn)行,所以在后臺(tái)耗電的也只有帶服務(wù)的應(yīng)用了。這個(gè)在進(jìn)程管理軟件里能看到,標(biāo)簽是service。至于廣播什么的我就不涉及了。所以沒有帶服務(wù)的應(yīng)用在后臺(tái)是完全不耗電的,沒有必要關(guān)閉。這種設(shè)計(jì)本來就是一個(gè)非常好的設(shè)計(jì),下次啟動(dòng)程序時(shí),會(huì)更快,因?yàn)椴恍枰x取界面資源,何必要關(guān)掉他們抹殺這個(gè)安卓的優(yōu)點(diǎn)呢?
還有一個(gè),為什么安卓一個(gè)應(yīng)用看起來那么耗內(nèi)存。這是因?yàn)椋沧可系膽?yīng)用是java,當(dāng)然需要虛擬機(jī),而安卓上的應(yīng)用是帶有獨(dú)立虛擬機(jī)的,也就是每開一個(gè)應(yīng)用就會(huì)打開一個(gè)獨(dú)立的虛擬機(jī)。這樣設(shè)計(jì)的原因是可以避免虛擬機(jī)崩潰導(dǎo)致整個(gè)系統(tǒng)崩潰,但代價(jià)就是需要更多內(nèi)存。(所以大家會(huì)發(fā)現(xiàn),其實(shí)正常使用安卓系統(tǒng)的話,很少死機(jī)的,當(dāng)然換的固件不好的情況除外啊。)
以上這些設(shè)計(jì)確保了安卓的穩(wěn)定性,正常情況下最多單個(gè)程序崩潰,但整個(gè)系統(tǒng)不會(huì)崩潰,也永遠(yuǎn)沒有內(nèi)存不足的提示出現(xiàn)。(大家可能是用Windows用習(xí)慣了,被內(nèi)存的概念毒害得太深了,總想保留更多的內(nèi)存,但實(shí)際上這并不一定會(huì)提升速度,相反卻喪失了程序啟動(dòng)快的這一系統(tǒng)特色,很沒必要。)