安卓手機的內存問題_第1頁
安卓手機的內存問題_第2頁
安卓手機的內存問題_第3頁
安卓手機的內存問題_第4頁
安卓手機的內存問題_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、不用在意剩余內存的大小.其實很多人都是把使用其他系統(tǒng)的習慣帶過來來了.安卓android大多應用沒有退出的設計其實是有道理的,這和系統(tǒng)對進程的調度機制有關系.如果你知道java, 就能更清楚這機制了.其實和 java 的垃圾回收機制類似,系統(tǒng)有一個規(guī)則來回收內存 .進行內存調度有個閥值,只有低于這個值系統(tǒng)才會按一個列表來關閉用戶不需要的東西 .當然這個值默認設置得很小,所以你會看到內存老在很少的數(shù)值徘徊.但事實上他并不影響速度 .相反加快了下次啟動應用的速度.這本來就是安卓android標榜的優(yōu)勢之一,如果人為去關閉進程,沒有太大必要.特別是自動關進程的軟件. 到這里有人會說了,那為什么內存少

2、的時候運行大型程序會慢呢?其實很簡單 ,在內存剩余不多時打開大型程序,會觸發(fā)系統(tǒng)自身的調進程調度策略,這是十分消耗系統(tǒng)資源的操作,特別是在一個程序頻繁向系統(tǒng)申請內存的時候.這種情況下系統(tǒng)并不會關閉所有打開的進程,而是選擇性關閉,頻繁的調度自然會拖慢系統(tǒng).所以 ,論壇上有個更改內存閥值的程序可以有一定改善 . 但改動也可能帶來一些問題,取決于值的設定. 那么 ,進程管理軟件有無必要呢?有的 .就是在運行大型程序之前,你可以手動關閉一些進程釋放內存 ,可以顯著的提高運行速度.但一些小程序,完全可交由系統(tǒng)自己管理.談到這里 ,可能有的朋友會問,如果不關程序是不是會更耗電.我就說說安卓 android

3、后臺的原理 ,你就明白了 .安卓 android的應用在被切換到后臺時,它其實已經(jīng)被暫停了 ,并不會消耗cpu 資源 ,只保留了運行狀態(tài).所以為什么有的程序切出去重進會到主界面 .但是 ,一個程序如果想要在后臺處理些東西,如音樂 播放 ,它就會開啟一個服務.服務可在后臺持續(xù)運行,所以在后臺耗電的也只有帶服務的應用了.這個在進程管理軟件里能看到 ,標簽是 service. 至于廣播什么的我就不涉及了.所以沒有帶服務的應用在后臺是完全不耗電的 ,沒有必要關閉.這種設計本來就是一個非常好的設計,下次啟動程序時,會更快 ,因為不需要讀取界面資源,何必要關掉他們抹殺這個安卓android的優(yōu)點呢 ? 還

4、有一個 .為什么安卓android一個應用看起來那么耗內存.大家知道 ,安卓 android上的應用是 java, 當然需要虛擬機,而安卓 android上的應用是帶有獨立虛擬機的,也就是每開一個應用就會打開一個獨立的虛擬機.這樣設計的原因是可以避免虛擬機崩潰導致整個系統(tǒng)崩潰 ,但代價就是需要更多內存. 以上這些設計確保了安卓android的穩(wěn)定性 ,正常情況下最多單個程序崩潰,但整個系統(tǒng)不會崩潰 ,也永遠沒有內存不足的提示出現(xiàn).大家可能是被windows毒害得太深了 ,總想保留更多的內存,但實際上這并不一定會提升速度,相反卻喪失了程序啟動快的這一系統(tǒng)特色,很沒必要 .大家不妨按我說的習慣來用

5、用這個系統(tǒng).最后推薦一款進程管理軟件,systempanel,market上能搜到 ,界面友好啟動快,功能也不錯 ,用于手動關閉進程很好的軟件 . 祝大家玩機愉快,這系統(tǒng)開十天半個月都沒問題,不是 windows. 至于為什么開了大程序或者開了好幾個程序之后切換會變慢,我的理解如下 : 1. 大程序 a 已經(jīng)開啟 ,占用 70% 內存 ,如果再想運行一個b, 需要 50% 的內存 ,則就需要一個將 a 從內存中釋放或者壓縮的過程,所以表現(xiàn)出來的就是慢一會兒2.abcde共占用內存 80%, 運行新程序z 需要20% 的內存 ,系統(tǒng)內存因為沒見過剩余0的時候 ,也就是應該剩一部分空閑內存,那么就

6、需要從 ae這幾個程序中選擇一個或者幾個來關閉,這一過程也需要耗費系統(tǒng)資源,所以會慢一會兒3. 也就是說你手動去殺程序的時候,就是替系統(tǒng)在釋放內存,就算你不殺 ,在需要內存的時候系統(tǒng)也會自動釋放. 4. 不在后臺運行的程序(沒服務的),即使不殺也不會耗電.在后臺運行的(有服務的)程序 ,如后臺放歌 ,當然會耗電 . 5. 不是說殺進程沒用,不然作者就不會推薦進程管理軟件了.哪個帶服務耗電哪個后臺一直在運行 ,看服務就能看出來,這樣的該殺 . 6, 以 qq 舉例 ,正常的退 ,會在進程管理里留下qq 的運行狀態(tài) ,但不耗電不占cpu, 如果你只是切換出去(按小房子而不是退出)那么自然會耗電,因

7、為程序還在運行. (qq 后臺一樣后臺就是 qq 正常退出的時候和別的軟件一樣不完全退出會在內存里留著但是不占cpu 不費電再次啟動就會非常快了這就是為什么android 能超越wm6 的系統(tǒng)的原因)簡單的說說房子鍵和退出鍵的區(qū)別,輕度研究手機的內存管理! !在運行一個程序時,按一下房子鍵就可以退到桌面,一般來說按一下退出鍵也可以退到桌面,這兩者有什么區(qū)別呢?其實是有區(qū)別的,你應該根據(jù)自己的需要靈活選擇按房子鍵, 看起來似乎是退出了,但是其實這個軟件并沒有被關閉,而是轉為了后臺程序(指一般的軟件,不討論特別種類的軟件)按退出鍵, 看起來也是退出沒錯,但這個軟件其實是被轉為了空置程序(音樂除外,

8、音樂屬于有服務的特殊軟件)咱們再來看看下圖,是 android的所有 5個程序進程的級別高低,空進程是最低的,它存在的目的是為了下次打開這個軟件的時候可以更加方便快速(這是個很好的設計目的),而一旦需要清理出更多內存空間時,它也是被系統(tǒng)自動的最優(yōu)先清除的系統(tǒng)進程級別圖,級別越低的會越快越早的被系統(tǒng)智能清理掉所以,大家明白了吧?一旦需要退出軟件時,如果是沒有提供退出功能的軟件,那么盡量用退出鍵退出而不是房子鍵, 并且, 最重要的是, 沒有必要用進程管理類軟件主動去清理空置進程,因為它本來就是為了被清理而存在,但在沒輪到它被清理之前,還可以發(fā)揮重新快速開啟的作用,一旦被你主動清理了,就連這點好處都

9、沒有了,那么, android系統(tǒng)的設計師又何必要設計出這個空置程序呢?直接釋放內存不是更好么?所以,結論就是, 既然它存在, 就有它存在的好處!就要讓我們享受到這個好處!用進程管理主動去清除空置程序絕對是違反android系統(tǒng)的設計本意的,是一種可笑的傻做法!再來說說房子鍵眾所周知, android跟 iphone不同,咱們的gphone是一個典型的多任務系統(tǒng),既然是多任務系統(tǒng),那么自然就會有一個在多任務之間切換的需要,那么大家是否真的都會這個操作呢?這時候, 就需要用到房子鍵了,在一個程序中的時候,比如短信息, 看到幾個單詞不認識,那么就可以選中這段文字,然后復制,按房子鍵切換到桌面,然后

10、打開詞典,粘貼,查詢,查好后再長按房子鍵(長按的作用是在幾個打開的程序和最近曾打開的程序之間切換),切換回短信息, 這時候短信息程序不需要重新打開仍然是你剛才的界面,可以再復制然后長按切換詞典繼續(xù)查詢下一個單詞。 。 。這就是房子鍵的用法,其實想必大家都知道這個用法,只不過可能沒有考慮過其實這是一個前后臺程序之間切換的過程而已。 。最后,簡單的歸納一下所有內容,其實整篇文章的意思就是說,按退出鍵相當于“ 真正的” 退出關閉程序,按房子鍵,看起來似乎是關閉了程序,但是其實只是一種假象,程序只是被降低了僅僅“ 一” 個等級而已,房子更適合多任務切換用,就這么簡單。 。關于 android內存管理的

11、原理,及相關自動內存管理軟件原理android采取了一種有別于linux的進程管理策略,有別于linux的在進程活動停止后就結束該進程,android把這些進程都保留在內存中,直到系統(tǒng)需要更多內存為止。這些保留在內存中的進程通常情況下不會影響整體系統(tǒng)的運行速度,并且當用戶再次激活這些進程時,提升了進程的啟動速度。那 android什么時候結束進程?結束哪個進程呢?之前普遍的認識是android是依據(jù)一個名為lru (last recently used 最近使用過的程序)列表,將程序進行排序,并結束最早的進程。xda 的樓主又進一步對這個管理機制進行研究,有了如下發(fā)現(xiàn):1. 系統(tǒng)會對進程的重要

12、性進行評估,并將重要性以“ oom_adj” 這個數(shù)值表示出來,賦予各個進程; (系統(tǒng)會根據(jù)“ oom_adj” 來判斷需要結束哪些進程,一般來說,“ oom_adj”的值越大,該進程被系統(tǒng)選中終止的可能就越高)2. 前臺程序的 “ oom_adj” 值為 0,這意味著它不會被系統(tǒng)終止,一旦它不可訪問后,會獲得個更高的 “ oom_adj” , 作者推測 “ oom_adj” 的值是根據(jù)軟件在lru 列表中的位置所決定的;3.android不同于 linux ,有一套自己獨特的進程管理模塊,這個模塊有更強的可定制性,可根據(jù) “ oom_adj” 值的范圍來決定進程管理策略,比如可以設定“ 當內

13、存小于x 時,結束 “ oom_adj” 大于 y 的進程 ” 。這給了進程管理腳本的編寫以更多的選擇。4.android將進程分為六大類:1. 前臺進程( foreground) :目前正在屏幕上顯示的進程和一些系統(tǒng)進程。舉例來說,dialer storage,googlesearch等系統(tǒng)進程就是前臺進程;再舉例來說,當你運行一個程序,如瀏覽器 ,當瀏覽器界面在前臺顯示時,瀏覽器屬于前臺進程(foreground) ,但一旦你按home回到主界面, 瀏覽器就變成了后臺程序(background) 。我們最不希望終止的進程就是前臺進程。2. 可見進程( visible ) :可見進程是一些不

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

15、太希望他們被終止4. 后臺進程( hidden ) :雖然作者用了hidden這個詞,但實際即是后臺進程(background) ,就是我們通常意義上理解的啟動后被切換到后臺的進程,如瀏覽器,閱讀器等。 當程序顯示在屏幕上時,他所運行的進程即為前臺進程(foreground) ,一旦我們按 home返回主界面(注意是按home ,不是按back ) ,程序就駐留在后臺,成為后臺進程(background) 。后臺進程的管理策略有多種:有較為積極的方式,一旦程序到達后臺立即終止, 這種方式會提高程序的運行速度,但無法加速程序的再次啟動;也有較消極的方式, 盡可能多的保留后臺程序,雖然可能會影響到

16、單個程序的運行速度,但在再次啟動已啟動的程序時,速度會有所提升。這里就需要用戶根據(jù)自己的使用習慣找到一個平衡點5. 內容供應節(jié)點(content provider) :沒有程序實體,進提供內容供別的程序去用的,比如日歷供應節(jié)點,郵件供應節(jié)點等。在終止進程時,這類程序應該有較高的優(yōu)先權6. 空進程( empty) :沒有任何東西在內運行的進程,有些程序,比如bte ,在程序退出后, 依然會在進程中駐留一個空進程,這個進程里沒有任何數(shù)據(jù)在運行,作用往往是提高該程序下次的啟動速度或者記錄程序的一些歷史信息。這部分進程無疑是應該最先終止的。實踐說完理論, 說些實踐的東西,怎樣管理這六類進程,如何來設置

17、進程管理模塊是這部分說的內容。首先是軟件,推薦使用minfreemanager,市場上就有下載,用于設置這六類進程的管理策略。軟件運行后有六個輸入框,在輸入框中只能輸入數(shù)字,這些數(shù)字代表了這類進程的處理策略,比如foreground app 下的輸入框顯示6,就表示,當可用內存低于6mb 時,終止foreground app。下面的類似,如empty app 下的輸入框顯示24 ,則表示,當內存低于24mb時,終止empty app 。從軟件數(shù)值的設置不難看出結束進程的有限順序:emptycontent providerhiddensecondary servervisibleforegrou

18、nd。但默認設置確存在一些問題:各類進程的管理策略的閥值相當接近:6,8,16 , 20 ,22 ,24 ,最大的相差也不到8mb ,在實際程序運行中,很容易導致多種類型的進程同時被關閉。如可用內存在25 時,突然啟動照相程序,系統(tǒng)可用內存急速,可能會導致空進程、內容供應節(jié)點、后臺進程、次要服務等同時被關閉閥值上限較低:一般手機啟動后,可用內存在50-100左右,但隨著手機的使用,可用內存會逐步減少,最后降低到24mb左右,則系統(tǒng)開始啟動進程管理機制,開始結束進程,但這個閥限制設在了24mb ,相對來說偏低。其結果會導致系統(tǒng)使用一段時間后,整體速度變慢。很明顯的就是,當手機長時間使用后,開啟電

19、話 撥號,相冊,照相機等應用時,系統(tǒng)的反應速度極慢?;谝陨蠋讉€問題,不難看出,我們修改的目標也將非常明確,主要解決兩個矛盾:拉開各進程的閥值層次,使得進程管理機制能更有效得工作提升閥值上限,空出更多的空余內存,以提升系統(tǒng)整體的運行速度進程管理策略設置原則:前臺進程、 可見進程和次要服務是與用戶體驗息息相關的內容,這部分的進程管理策略要相對保守,給這些進程留下足夠的運行空間壓榨無用進程,騰出內存空間給主要程序使用下面筆者總結了幾種設置方式,適應不同的使用需要:游戲 玩家 / 重度瀏覽器使用者配置:用戶特點:長時間專注于某一特定的,高內存需求的程序,對多任務的需求不高配置參數(shù):1.foreground: 6 2.visible:8 3.secondary server : 16 4.hiden app:80 5.content provider:90 6.empty:100 配置理念: 壓榨后臺進程, 內

溫馨提示

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

評論

0/150

提交評論