安卓內(nèi)存機(jī)制怎么更改?
安卓內(nèi)存機(jī)制怎么更改?
安卓內(nèi)存機(jī)制怎么更改?不用在意剩余內(nèi)存的大小,其實(shí)很多人都是把使用其他系統(tǒng)的習(xí)慣帶過來來了,安卓Android大多應(yīng)用沒有退出的設(shè)計(jì)其實(shí)是有道理的,下面是學(xué)習(xí)啦小編整理的一些相關(guān)知識,希望對大家有幫助!
安卓內(nèi)存機(jī)制怎么更改?
android的原理,不用在意剩余內(nèi)存的大小,其實(shí)很多人都是把使用其他系統(tǒng)的習(xí)慣帶過來來了.安卓Android大多應(yīng)用沒有退出的設(shè)計(jì)其實(shí)是有道理 的,這和系統(tǒng)對進(jìn)程的調(diào)度機(jī)制有關(guān)系.如果你知道java,就能更清楚這機(jī)制了.其實(shí)和java的垃圾回收機(jī)制類似,系統(tǒng)有一個(gè)規(guī)則來回收內(nèi)存.進(jìn)行內(nèi)存 調(diào)度有個(gè)閥值,只有低于這個(gè)值系統(tǒng)才會按一個(gè)列表來關(guān)閉用戶不需要的東西.當(dāng)然這個(gè)值默認(rèn)設(shè)置得很小,所以你會看到內(nèi)存老在很少的數(shù)值徘徊.但事實(shí)上他并 不影響速度.相反加快了下次啟動應(yīng)用的速度.這本來就是安卓Android標(biāo)榜的優(yōu)勢之一,如果人為去關(guān)閉進(jìn)程,沒有太大必要.特別是自動關(guān)進(jìn)程的軟件.
到這里有人會說了,那為什么內(nèi)存少的時(shí)候運(yùn)行大型程序會慢呢?其實(shí)很簡單,在內(nèi)存剩余不多時(shí)打開大型程序,會觸發(fā)系統(tǒng)自身的調(diào)進(jìn)程調(diào)度策略,這是十分消耗 系統(tǒng)資源的操作,特別是在一個(gè)程序頻繁向系統(tǒng)申請內(nèi)存的時(shí)候.這種情況下系統(tǒng)并不會關(guān)閉所有打開的進(jìn)程,而是選擇性關(guān)閉,頻繁的調(diào)度自然會拖慢系統(tǒng).所 以,論壇上有個(gè)更改內(nèi)存閥值的程序可以有一定改善.
但改動也可能帶來一些問題,取決于值的設(shè)定.
那么,進(jìn)程管理軟件有無必要呢?有的.就是在運(yùn)行大型程序之前,你可以手動關(guān)閉一些進(jìn)程釋放內(nèi)存,可以顯著的提高運(yùn)行速度.但一些小程序,完全可交由系統(tǒng)自己管理.談到這里,可能有的朋友會問,如果不關(guān)程序是不是會更耗電.我就說說
安卓Android后臺的原理,你就明白了.安卓Android的應(yīng)用在被切換到后臺時(shí),它其實(shí)已經(jīng)被暫停了,并不會消耗cpu資源,只保留了運(yùn)行狀態(tài). 所以為什么有的程序切出去重進(jìn)會到主界面.但是,一個(gè)程序如果想要在后臺處理些東西,如音樂播放,它就會開啟一個(gè)服務(wù).服務(wù)可在后臺持續(xù)運(yùn)行,所以在后臺 耗電的也只有帶服務(wù)的應(yīng)用了.這個(gè)在進(jìn)程管理軟件里能看到,標(biāo)簽是service.至于廣播什么的我就不涉及了.所以沒有帶服務(wù)的應(yīng)用在后臺是完全不耗電 的,沒有必要關(guān)閉.這種設(shè)計(jì)本來就是一個(gè)非常好的設(shè)計(jì),下次啟動程序時(shí),會更快,因?yàn)椴恍枰x取界面資源,何必要關(guān)掉他們抹殺這個(gè)安卓Android的優(yōu) 點(diǎn)呢?
還有一個(gè).為什么安卓Android一個(gè)應(yīng)用看起來那么耗內(nèi)存.大家知道,安卓Android上的應(yīng)用是java,當(dāng)然需要虛擬機(jī),而安卓Android 上的應(yīng)用是帶有獨(dú)立虛擬機(jī)的,也就是每開一個(gè)應(yīng)用就會打開一個(gè)獨(dú)立的虛擬機(jī).這樣設(shè)計(jì)的原因是可以避免虛擬機(jī)崩潰導(dǎo)致整個(gè)系統(tǒng)崩潰,但代價(jià)就是需要更多內(nèi) 存.
以上這些設(shè)計(jì)確保了安卓Android的穩(wěn)定性,正常情況下最多單個(gè)程序崩潰,但整個(gè)系統(tǒng)不會崩潰,也永遠(yuǎn)沒有內(nèi)存不足的提示出現(xiàn).大家可能是被 windows毒害得太深了,總想保留更多的內(nèi)存,但實(shí)際上這并不一定會提升速度,相反卻喪失了程序啟動快的這一系統(tǒng)特色,很沒必要.大家不妨按我說的習(xí) 慣來用用這個(gè)系統(tǒng).最后推薦一款進(jìn)程管理軟件,systempanel,market上能搜到,界面友好啟動快,功能也不錯(cuò),用于手動關(guān)閉進(jìn)程很好的軟 件.
至于為什么開了大程序或者開了好幾個(gè)程序之后切換會變慢,我的理解如下:
1.大程序A已經(jīng)開啟,占用70%內(nèi)存,如果再想運(yùn)行一個(gè)B,需要50%的內(nèi)存,則就需要一個(gè)將A從內(nèi)存中釋放或者壓縮的過程,所以表現(xiàn)出來的就是慢一會兒
2.A\B\C\D\E共占用內(nèi)存80%,運(yùn)行新程序Z需要
20%的內(nèi)存,系統(tǒng)內(nèi)存因?yàn)闆]見過剩余0的時(shí)候,也就是應(yīng)該剩一部分空閑內(nèi)存,那么就需要從A~E這幾個(gè)程序中選擇一個(gè)或者幾個(gè)來關(guān)閉,這一過程也需要耗費(fèi)系統(tǒng)資源,所以會慢一會兒
3.也就是說你手動去殺程序的時(shí)候,就是替系統(tǒng)在釋放內(nèi)存,就算你不殺,在需要內(nèi)存的時(shí)候系統(tǒng)也會自動釋放.
4.不在后臺運(yùn)行的程序(沒服務(wù)的),即使不殺也不會耗電.在后臺運(yùn)行的(有服務(wù)的)程序,如后臺放歌,當(dāng)然會耗電.
5.不是說殺進(jìn)程沒用,不然作者就不會推薦進(jìn)程管理軟件了.哪個(gè)帶服務(wù)耗電哪個(gè)后臺一直在運(yùn)行,看服務(wù)就能看出來,這樣的該殺.
6,以qq舉例,正常的退,會在進(jìn)程管理里留下qq的運(yùn)行狀態(tài),但不耗電不占
cpu,如果你只是切換出去(按小房子而不是退出)那么自然會耗電,因?yàn)槌绦蜻€在運(yùn)行.
(qq后臺一樣后臺 就是qq正常退出的時(shí)候 和別的軟件一樣 不完全退出
會在內(nèi)存里留著 但是不占cpu 不費(fèi)電 再次啟動就會非常快了 這就是為什么 android 能超越
WM6的系統(tǒng)的原因)
簡單的說說房子鍵和退出鍵的區(qū)別,輕度研究手機(jī)的內(nèi)存管理!!!
在運(yùn)行一個(gè)程序時(shí),按一下房子鍵就可以退到桌面,一般來說按一下退出鍵也可以退到桌面,這兩者有什么區(qū)別呢?
其實(shí)是有區(qū)別的,你應(yīng)該根據(jù)自己的需要靈活選擇
按房子鍵,看起來似乎是退出了,但是其實(shí)這個(gè)軟件并沒有被關(guān)閉,而是轉(zhuǎn)為了后臺程序(指一般的軟件,不討論特別種類的軟件)
按退出鍵,看起來也是退出沒錯(cuò),但這個(gè)軟件其實(shí)是被轉(zhuǎn)為了空置程序(音樂除外,音樂屬于有服務(wù)的特殊軟件)
咱們再來看看下圖,是android的所有5個(gè)程序進(jìn)程的級別高低,空進(jìn)程是最低的,它存在的目的是為了下次打開這個(gè)軟件的時(shí)候可以更加方便快速(這是個(gè)很好的設(shè)計(jì)目的),而一旦需要清理出更多內(nèi)存空間時(shí),它也是被系統(tǒng)自動的最優(yōu)先清除的
系統(tǒng)進(jìn)程級別圖,級別越低的會越快越早的被系統(tǒng)智能清理掉
所以,大家明白了吧?
一旦需要退出軟件時(shí),如果是沒有提供退出功能的軟件,那么盡量用退出鍵退出而不是房子鍵,并且,最重要的是,沒有必要用進(jìn)程管理類軟件主動去清理空置進(jìn) 程,因?yàn)樗緛砭褪菫榱吮磺謇矶嬖?,但在沒輪到它被清理之前,還可以發(fā)揮重新快速開啟的作用,一旦被你主動清理了,就連這點(diǎn)好處都沒有了,那 么,android系統(tǒng)的設(shè)計(jì)師又何必要設(shè)計(jì)出這個(gè)空置程序呢?直接釋放內(nèi)存不是更好么?所以,結(jié)論就是,既然它存在,就有它存在的好處!就要讓我們享受 到這個(gè)好處!
用進(jìn)程管理主動去清除空置程序絕對是違反android系統(tǒng)的設(shè)計(jì)本意的,是一種可笑的傻做法!
再來說說房子鍵
眾所周知,android跟iphone不同,咱們的gphone是一個(gè)典型的多任務(wù)系統(tǒng),既然是多任務(wù)系統(tǒng),那么自然就會有一個(gè)在多任務(wù)之間切換的需要,那么大家是否真的都會這個(gè)操作呢?
這時(shí)候,就需要用到房子鍵了,在一個(gè)程序中的時(shí)候,比如短信息,看到幾個(gè)單詞不認(rèn)識,那么就可以選中這段文字,然后復(fù)制,按房子鍵切換到桌面,然后打開詞 典,粘貼,查詢,查好后再長按房子鍵(長按的作用是在幾個(gè)打開的程序和最近曾打開的程序之間切換),切換回短信息,這時(shí)候短信息程序不需要重新打開仍然是 你剛才的界面,可以再復(fù)制然后長按切換詞典繼續(xù)查詢下一個(gè)單詞。。。。
這就是房子鍵的用法,其實(shí)想必大家都知道這個(gè)用法,只不過可能沒有考慮過其實(shí)這是一個(gè)前后臺程序之間切換的過程而已。。。
最后,簡單的歸納一下所有內(nèi)容,其實(shí)整篇文章的意思就是說,按退出鍵相當(dāng)于“真正的”退出關(guān)閉程序,按房子鍵,看起來似乎是關(guān)閉了程序,但是其實(shí)只是一種假象,程序只是被降低了僅僅“一”個(gè)等級而已,房子更適合多任務(wù)切換用,就這么簡單。。。
關(guān)于android內(nèi)存管理的原理,及相關(guān)自動內(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)程時(shí),提升了進(jìn)程的啟動速度。
那Android什么時(shí)候結(jié)束進(jìn)程?結(jié)束哪個(gè)進(jìn)程呢?之前普遍的認(rèn)識是Android是依據(jù)一個(gè)名為LRU(last
recently used
最近使用過的程序)列表,將程序進(jìn)行排序,并結(jié)束最早的進(jìn)程。XDA的樓主又進(jìn)一步對這個(gè)管理機(jī)制進(jìn)行研究,有了如下發(fā)現(xiàn):
1.系統(tǒng)會對進(jìn)程的重要性進(jìn)行評估,并將重要性以“oom_adj”這個(gè)數(shù)值表示出來,賦予各個(gè)進(jìn)程;(系統(tǒng)會根據(jù)“oom_adj”來判斷需要結(jié)束哪些進(jìn)程,一般來說,“oom_adj”的值越大,該進(jìn)程被系統(tǒng)選中終止的可能就越高)
2.前臺程序的“oom_adj”值為0,這意味著它不會被系統(tǒng)終止,一旦它不可訪問后,會獲得個(gè)更高的“oom_adj”,作者推測“oom_adj”的值是根據(jù)軟件在LRU列表中的位置所決定的;
3.Android不同于Linux,有一套自己獨(dú)特的進(jìn)程管理模塊,這個(gè)模塊有更強(qiáng)的可定制性,可根據(jù)“oom_adj”值的范圍來決定進(jìn)程管理策略,比如可以設(shè)定“當(dāng)內(nèi)存小于X時(shí),結(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)行一個(gè)程序,如瀏覽器,當(dāng)瀏覽器界面在前臺顯示時(shí),瀏覽器屬于前臺進(jìn)程 (foreground),但一旦你按home回到主界面,瀏覽器就變成了后臺程序(background)。我們最不希望終止的進(jìn)程就是前臺進(jìn)程。
2.可見進(jìn)程(visible):可見進(jìn)程是一些不再前臺,但用戶依然可見的進(jìn)程,舉個(gè)例來說:widget、輸入法等,都屬于visible。這部分進(jìn) 程雖然不在前臺,但與我們的使用也密切相關(guān),我們也不希望它們被終止(你肯定不希望時(shí)鐘、天氣,新聞等widget被終止,那它們將無法同步,你也不希望 輸入法被終止,否則你每次輸入時(shí)都需要重新啟動輸入法)
3.次要服務(wù)(secondary
server):目前正在運(yùn)行的一些服務(wù)(主要服務(wù),如撥號等,是不可能被進(jìn)程管理終止的,故這里只談次要服務(wù)),舉例來說:谷歌企業(yè)套件,Gmail內(nèi) 部存儲,聯(lián)系人內(nèi)部存儲等。這部分服務(wù)雖然屬于次要服務(wù),但很一些系統(tǒng)功能依然息息相關(guān),我們時(shí)常需要用到它們,所以也太希望他們被終止
4.后臺進(jìn)程(hidden):雖然作者用了hidden這個(gè)詞,但實(shí)際即是后臺進(jìn)程(background),就是我們通常意義上理解的啟動后被切換到 后臺的進(jìn)程,如瀏覽器,閱讀器等。當(dāng)程序顯示在屏幕上時(shí),他所運(yùn)行的進(jìn)程即為前臺進(jìn)程(foreground),一旦我們按home返回主界面(注意是按 home,不是按back),程序就駐留在后臺,成為后臺進(jìn)程
(background)。后臺進(jìn)程的管理策略有多種:有較為積極的方式,一旦程序到達(dá)后臺立即終止,這種方式會提高程序的運(yùn)行速度,但無法加速程序的再 次啟動;也有較消極的方式,盡可能多的保留后臺程序,雖然可能會影響到單個(gè)程序的運(yùn)行速度,但在再次啟動已啟動的程序時(shí),速度會有所提升。這里就需要用戶 根據(jù)自己的使用習(xí)慣找到一個(gè)平衡點(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)程時(shí),這類程序應(yīng)該有較高的優(yōu)先權(quán)
6.空進(jìn)程(empty):沒有任何東西在內(nèi)運(yùn)行的進(jìn)程,有些程序,比如BTE,在程序退出后,依然會在進(jìn)程中駐留一個(gè)空進(jìn)程,這個(gè)進(jìn)程里沒有任何數(shù)據(jù)在運(yùn)行,作用往往是提高該程序下次的啟動速度或者記錄程序的一些歷史信息。這部分進(jìn)程無疑是應(yīng)該最先終止的。
實(shí)踐
說完理論,說些實(shí)踐的東西,怎樣管理這六類進(jìn)程,如何來設(shè)置進(jìn)程管理模塊是這部分說的內(nèi)容。
首先是軟件,推薦使用MinFreeManager,市場上就有下載,用于設(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。
但默認(rèn)設(shè)置確存在一些問題:
各類進(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í),突然啟動照相程序,系統(tǒng)可用內(nèi)存急速,可能會導(dǎo)致空進(jìn)程、內(nèi)容供應(yīng)節(jié)點(diǎn)、后臺進(jìn)程、次要服務(wù)等同時(shí)被關(guān)閉
閥值上限較低:一般手機(jī)啟動后,可用內(nèi)存在50-100左右,但隨著手機(jī)的使用,可用內(nèi)存會逐步減少,最后降低到24MB左右,則系統(tǒng)開始啟動進(jìn)程管理機(jī) 制,開始結(jié)束進(jìn)程,但這個(gè)閥限制設(shè)在了24MB,相對來說偏低。其結(jié)果會導(dǎo)致系統(tǒng)使用一段時(shí)間后,整體速度變慢。很明顯的就是,當(dāng)手機(jī)長時(shí)間使用后,開啟 電話撥號,相冊,照相機(jī)等應(yīng)用時(shí),系統(tǒng)的反應(yīng)速度極慢。
基于以上幾個(gè)問題,不難看出,我們修改的目標(biāo)也將非常明確,主要解決兩個(gè)矛盾:
拉開各進(jìn)程的閥值層次,使得進(jìn)程管理機(jī)制能更有效得工作
提升閥值上限,空出更多的空余內(nèi)存,以提升系統(tǒng)整體的運(yùn)行速度
進(jìn)程管理策略設(shè)置原則:
前臺進(jìn)程、可見進(jìn)程和次要服務(wù)是與用戶體驗(yàn)息息相關(guān)的內(nèi)容,這部分的進(jìn)程管理策略要相對保守,給這些進(jìn)程留下足夠的運(yùn)行空間
壓榨無用進(jìn)程,騰出內(nèi)存空間給主要程序使用
下面筆者總結(jié)了幾種設(shè)置方式,適應(yīng)不同的使用需要:
游戲玩家/重度瀏覽器使用者配置:
用戶特點(diǎn):長時(shí)間專注于某一特定的,高內(nèi)存需求的程序,對多任務(wù)的需求不高
配置參數(shù):
1.Foreground:6
2.Visible:8
3.Secondary
Server:16
4.Hiden App:80
5.Content
Provider:90
6.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ù)處理不理想,開啟程序較多時(shí),后臺進(jìn)程會被終止
多任務(wù)配置:
用戶特點(diǎn):同時(shí)運(yùn)行多個(gè)應(yīng)用程序,需要經(jīng)常在多個(gè)程序間切換
配置參數(shù):
1.Foreground:6
2.Visible:8
3.Secondary
Server:16
4.Hiden App:20
5.Content
Provider:60
6.Empty:100
配置理念:壓榨空進(jìn)程,給內(nèi)容供應(yīng)節(jié)點(diǎn)留有一定空間,最大限度提升后臺程序的使用空間,提升多任務(wù)的處理能力
優(yōu)點(diǎn):運(yùn)行多個(gè)程序時(shí),由于可支配內(nèi)存較多,后臺程序不容易被終止
缺點(diǎn):程序啟動的速度和整體系統(tǒng)的運(yùn)行速度可能會比游戲玩家配置略慢一些,由于經(jīng)常運(yùn)行多任務(wù),平時(shí)系統(tǒng)的響應(yīng)速度會受到一定影響
輕度用戶/女生專用配置
用戶特點(diǎn):手機(jī)的主要功能是短信和電話,偶爾用用相機(jī)自拍
配置參數(shù):
1.Foreground:6
2.Visible:8
3.Secondary
Server:16
4.Hiden App:24
5.Content
Provider:32
6.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):比較均衡的配置,無明顯缺點(diǎn)
以上內(nèi)容主要是轉(zhuǎn)發(fā),希望對大家了解android的內(nèi)存管理機(jī)制有幫助