Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android手機 >> Android刷機教程 >> 中興刷機 >> 安卓內存管理 解決後台程序 增加運存

安卓內存管理 解決後台程序 增加運存

編輯:中興刷機

為什麼我剛刷完rom,殺下進程運行內存有65MB,以後就越來越少了呢?
為什麼UC浏覽器、QQ等程序掛到後台運行再重新回到前台後就掉線呢?
為什麼每次打開進程管理器,可用內存總是在24MB左右呢?


先來看下android的內存管理方式吧:(沒耐心的直接看紅字部分)


Android采取了一種有別於Linux的進程管理策略,有別於Linux的在進程活動停止後就結束該進程,Android把這些進程都保留在內存中,直到系統需要更多內存為止。這些保留在內存中的進程通常情況下不會影響整體系統的運行速度,並且當用戶再次激活這些進程時,提升了進程的啟動速度。
那Android什麼時候結束進程?結束哪個進程呢?之前普遍的認識是Android是依據一個名為LRU(last recently used 最近使用過的程序)列表,將程序進行排序,並結束最早的進程。其實安卓的內存管理機制是這樣的,如下:

1.系統會對進程的重要性進行評估,並將重要性以“oom_adj”這個數值表示出來,賦予各個進程;(系統會根據“oom_adj”來判斷需要結束哪些進程,一般來說,“oom_adj”的值越大,該進程被系統選中終止的可能就越高)

2.前台程序的“oom_adj”值為0,這意味著它不會被系統終止,一旦它不可訪問後,會獲得個更高的“oom_adj”,我們推測“oom_adj”的值是根據軟件在LRU列表中的位置所決定的;

3.Android不同於Linux,有一套自己獨特的進程管理模塊,這個模塊有更強的可定制性,可根據“oom_adj”值的范圍來決定進程管理策略,比如可以設定“當內存小於X時,結束“oom_adj”大於Y的進程”。這給了進程管理腳本的編寫以更多的選擇。

Android將進程分為六大類:

1.前台進程(foreground):目前正在屏幕上顯示的進程和一些系統進程。舉例來說,Dialer Storage,Google Search等系統進程就是前台進程;再舉例來說,當你運行一個程序,如浏覽器,當浏覽器界面在前台顯示時,浏覽器屬於前台進程(foreground),但一旦你按home回到主界面,浏覽器就變成了後台程序(background)。我們最不希望終止的進程就是前台進程。

2.可見進程(visible):可見進程是一些不再前台,但用戶依然可見的進程,舉個例來說:widget、輸入法等,都屬於visible。這部分進程雖然不在前台,但與我們的使用也密切相關,我們也不希望它們被終止(你肯定不希望時鐘、天氣,新聞等widget被終止,那它們將無法同步,你也不希望輸入法被終止,否則你每次輸入時都需要重新啟動輸入法)

3.次要服務(secondary server):目前正在運行的一些服務(主要服務,如撥號等,是不可能被進程管理終止的,故這裡只談次要服務),舉例來說:谷歌企業套件,Gmail內部存儲,聯系人內部存儲等。這部分服務雖然屬於次要服務,但很一些系統功能依然息息相關,我們時常需要用到它們,所以也太希望他們被終止

4.後台進程(hidden):雖然作者用了hidden這個詞,但實際即是後台進程(background),就是我們通常意義上理解的啟動後被切換到後台的進程,如浏覽器,閱讀器等。當程序顯示在屏幕上時,他所運行的進程即為前台進程(foreground),一旦我們按home返回主界面(注意是按home,不是按back),程序就駐留在後台,成為後台進程(background)。後台進程的管理策略有多種:有較為積極的方式,一旦程序到達後台立即終止,這種方式會提高程序的運行速度,但無法加速程序的再次啟動;也有較消極的方式,盡可能多的保留後台程序,雖然可能會影響到單個程序的運行速度,但在再次啟動已啟動的程序時,速度會有所提升。這裡就需要用戶根據自己的使用習慣找到一個平衡點

5.內容供應節點(content provider):沒有程序實體,進提供內容供別的程序去用的,比如日歷供應節點,郵件供應節點等。在終止進程時,這類程序應該有較高的優先權

6.空進程(empty):沒有任何東西在內運行的進程,有些程序,比如BTE,在程序退出後,依然會在進程中駐留一個空進程,這個進程裡沒有任何數據在運行,作用往往是提高該程序下次的啟動速度或者記錄程序的一些歷史信息。這部分進程無疑是應該最先終止的。



簡單來說,就是選擇退出程序時,並不是完全退出程序,該程序仍然會在後台駐留一個進程,以便下次更快的打開。那什麼時候完全關閉該程序呢?這取決於該程序的類型(就是上面講的那幾個類型)。系統會給每個類型的程序一個內存值阈(閥門),也就是說當運行內存低於某個值時,系統會自動按照打開的先後順序來關閉該類型的程序。例如,當運存小於24MB時,系統才會自動關閉空進程這一類型的程序。但是當運存到24MB時,後台運行QQ就會掉線。想要讓QQ不掉線,就必須讓運存在還剩24MB之前把不用的空進程關掉。
既然已經知道了android系統的內存管理原理,那麼怎樣讓它按照我們的意願自動關閉我們想關閉的程序,而不是一遍一遍的全殺任務呢?
下面推薦一個小軟件:自動內存管理,


這款軟件,操作簡單,剛進入時會用幫助顯示,建議先仔細看一下,需要ROOT權限才能運行,簡單的說,就是管理每個類型程序的值阈的。再拿上面QQ的例子來說,我們可以把空進程的值阈調高點,也就是當運存小於45MB時,關閉空進程。這樣,就可以最大限度的節省內存空間。
軟件的操作方式很簡單,就是拖動滑塊來調節程序的值阈。如圖,前面一張圖的系統默認的,後面一張是建議調整的值











注意滑塊表示的內存數量並不是該類型程序能用的運存,而是當運存低於該值時,選擇關閉著類型的程序。前台程序,可見程序,輔助服務建議不用動,隱藏程序,內容提供可以適當調高一點,但也不要太高,置空程序(空閒程序)可以調到最高,設置好後,點擊應用,最好重啟一下手機,個人意見,大家可以實踐摸索。
用自動內存管理的好處: 自動結束你想結束的進程,不用頻繁殺進程。而這個程序的運存才2.7MB。節省大量運存。
神馬?你不知道你運行的程序屬於哪個類型的?好吧,再推薦一個軟件,超詳細的任務管理器。不僅能查看當前任務,還能查看手機各個方面的情況。安裝後顯示名稱“系統面板”




本人親測,有一定的效果,大家可以試試。



自動內存管理.apk (588.25 KB,)

系統默認值


建議調整值 

 

中興V880刷機教程: http://www.quzhuo.com/article/html/885.html


 
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved