(轉)Android進程管理詳解

Android的原理-不須要太多的剩餘內存

 

    不用在乎剩餘內存的大小.其實不少人都是把使用其餘系統的習慣帶過來來了.安卓Android大多應用沒有退出的設計實際上是有道理的,這和系統對進程的調度機制有關係.若是你知道java,就能更清楚這機制了.其實和java的垃圾回收機制相似,系統有一個規則來回收內存.進行內存調度有個閥值,只有低於這個值系統纔會按一個列表來關閉用戶不須要的東西.固然這個值默認設置得很小,因此你會看到內存老在不多的數值徘徊.但事實上他並不影響速度.相反加快了下次啓動應用的速度.這原本就是安卓Android標榜的優點之一,若是人爲去關閉進程,沒有太大必要.特別是自動關進程的軟件.java

    到這裏有人會說了,那爲何內存少的時候運行大型程序會慢呢?其實很簡單,在內存剩餘很少時打開大型程序,會觸發系統自身的調進程調度策略,這是十分消耗系統資源的操做,特別是在一個程序頻繁向系統申請內存的時候.這種狀況下系統並不會關閉全部打開的進程,而是選擇性關閉,頻繁的調度天然會拖慢系統.因此,論壇上有個更改內存閥值的程序能夠有必定改善. 但改動也可能帶來一些問題,取決於值的設定.
    那麼,進程管理軟件有無必要呢?有的.就是在運行大型程序以前,你能夠手動關閉一些進程釋放內存,能夠顯著的提升運行速度.但一些小程序,徹底可交由系統本身管理.談到這裏,可能有的朋友會問,若是不關程序是否是會更耗電.我就說說 安卓Android後臺的原理,你就明白了.安卓Android的應用在被切換到後臺時,它其實已經被暫停了,並不會消耗cpu資源,只保留了運行狀態.因此爲何有的程序切出去重進會到主界面.可是,一個程序若是想要在後臺處理些東西,如音樂播放,它就會開啓一個服務.服務可在後臺持續運行,因此在後臺耗電的也只有帶服務的應用了.這個在進程管理軟件裏能看到,標籤是service.至於廣播什麼的我就不涉及了.因此沒有帶服務的應用在後臺是徹底不耗電的,沒有必要關閉.這種設計原本就是一個很是好的設計,下次啓動程序時,會更快,由於不須要讀取界面資源,何須要關掉他們抹殺這個安卓Android的優勢呢?
    還有一個.爲何安卓Android一個應用看起來那麼耗內存.你們知道,安卓Android上的應用是java,固然須要虛擬機,而安卓Android上的應用是帶有獨立虛擬機的,也就是每開一個應用就會打開一個獨立的虛擬機.這樣設計的緣由是能夠避免虛擬機崩潰致使整個系統崩潰,但代價就是須要更多內存.

    以上這些設計確保了安卓Android的穩定性,正常狀況下最多單個程序崩潰,但整個系統不會崩潰,也永遠沒有內存不足的提示出現.你們多是被windows毒害得太深了,總想保留更多的內存,但實際上這並不必定會提高速度,相反卻喪失了程序啓動快的這一系統特點,很不必.你們不妨按我說的習慣來用用這個系統.最後推薦一款進程管理軟件,systempanel,market上能搜到,界面友好啓動快,功能也不錯,用於手動關閉進程很好的軟件. 祝你們玩機愉快,這系統開十天半個月都沒問題,不是windows.android

 

至於爲何開了大程序或者開了好幾個程序以後切換會變慢,個人理解以下:
1.大程序A已經開啓,佔用70%內存,若是再想運行一個B,須要50%的內存,則就須要一個將A從內存中釋放或者壓縮的過程,因此表現出來的就是慢一下子
2.A\B\C\D\E共佔用內存80%,運行新程序Z須要 20%的內存,系統內存由於沒見過剩餘0的時候,也就是應該剩一部分空閒內存,那麼就須要從A~E這幾個程序中選擇一個或者幾個來關閉,這一過程也須要耗費系統資源,因此會慢一下子
3.也就是說你手動去殺程序的時候,就是替系統在釋放內存,就算你不殺,在須要內存的時候系統也會自動釋放.
4.不在後臺運行的程序(沒服務的),即便不殺也不會耗電.在後臺運行的(有服務的)程序,如後臺放歌,固然會耗電.
5.不是說殺進程沒用,否則做者就不會推薦進程管理軟件了.哪一個帶服務耗電哪一個後臺一直在運行,看服務就能看出來,這樣的該殺.
6,以qq舉例,正常的退,會在進程管理裏留下qq的運行狀態,但不耗電不佔 cpu,若是你只是切換出去(按小房子而不是退出)那麼天然會耗電,由於程序還在運行.

(qq後臺同樣後臺 就是qq正常退出的時候 和別的軟件同樣 不徹底退出 會在內存裏留着  可是不佔cpu 不費電 再次啓動就會很是快了 這就是爲何 android 能超越 WM6的系統的緣由)小程序

 

 

簡單的說說房子鍵和退出鍵的區別,輕度研究手機的內存管理!!!


在運行一個程序時,按一下房子鍵就能夠退到桌面,通常來講按一下退出鍵也能夠退到桌面,這二者有什麼區別呢?

實際上是有區別的,你應該根據本身的須要靈活選擇

按房子鍵,看起來彷佛是退出了,可是其實這個軟件並無被關閉,而是轉爲了後臺程序(指通常的軟件,不討論特別種類的軟件)

按退出鍵,看起來也是退出沒錯,但這個軟件實際上是被轉爲了空置程序(音樂除外,音樂屬於有服務的特殊軟件)

我們再來看看下圖,是android的全部5個程序進程的級別高低,空進程是最低的,它存在的目的是爲了下次打開這個軟件的時候能夠更加方便快速(這是個很好的設計目的),而一旦須要清理出更多內存空間時,它也是被系統自動的最優先清除的


系統進程級別圖,級別越低的會越快越早的被系統智能清理掉


因此,你們明白了吧? 一旦須要退出軟件時,若是是沒有提供退出功能的軟件,那麼儘可能用退出鍵退出而不是房子鍵,而且,最重要的是,沒有必要用進程管理類軟件主動去清理空置進程,由於它原本就是爲了被清理而存在,但在沒輪到它被清理以前,還能夠發揮從新快速開啓的做用,一旦被你主動清理了,就連這點好處都沒有了,那麼,android系統的設計師又何須要設計出這個空置程序呢?直接釋放內存不是更好麼?因此,結論就是,既然它存在,就有它存在的好處!就要讓咱們享受到這個好處!用進程管理主動去清除空置程序絕對是違反android系統的設計本意的,是一種好笑的傻作法!




再來講說房子鍵

衆所周知,android跟iphone不一樣,我們的gphone是一個典型的多任務系統,既然是多任務系統,那麼天然就會有一個在多任務之間切換的須要,那麼你們是否真的都會這個操做呢?

這時候,就須要用到房子鍵了,在一個程序中的時候,好比短信息,看到幾個單詞不認識,那麼就能夠選中這段文字,而後複製,按房子鍵切換到桌面,而後打開詞典,粘貼,查詢,查好後再長按房子鍵(長按的做用是在幾個打開的程序和最近曾打開的程序之間切換),切換回短信息,這時候短信息程序不須要從新打開仍然是你剛纔的界面,能夠再複製而後長按切換詞典繼續查詢下一個單詞。。。。

這就是房子鍵的用法,其實想必你們都知道這個用法,只不過可能沒有考慮過其實這是一個先後臺程序之間切換的過程而已。。。




最後,簡單的概括一下全部內容,其實整篇文章的意思就是說,按退出鍵至關於「真正的」退出關閉程序,按房子鍵,看起來彷佛是關閉了程序,可是其實只是一種假象,程序只是被下降了僅僅「一」個等級而已,房子更適合多任務切換用,就這麼簡單。。。windows

 

關於android內存管理的原理,及相關自動內存管理軟件原理瀏覽器

 

Android採起了一種有別於Linux的進程管理策略,有別於Linux的在進程活動中止後就結束該進程,Android把這些進程都保留在內存中,直到系統須要更多內存爲止。這些保留在內存中的進程一般狀況下不會影響總體系統的運行速度,而且當用戶再次激活這些進程時,提高了進程的啓動速度。

那Android何時結束進程?結束哪一個進程呢?以前廣泛的認識是Android是依據一個名爲LRU(last recently used 最近使用過的程序)列表,將程序進行排序,並結束最先的進程。XDA的樓主又進一步對這個管理機制進行研究,有了以下發現:

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的進程」。這給了進程管理腳本的編寫以更多的選擇。

4.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,在程序退出後,依然會在進程中駐留一個空進程,這個進程裏沒有任何數據在運行,做用每每是提升該程序下次的啓動速度或者記錄程序的一些歷史信息。這部分進程無疑是應該最早終止的。


實踐

說完理論,說些實踐的東西,怎樣管理這六類進程,如何來設置進程管理模塊是這部分說的內容。

首先是軟件,推薦使用MinFreeManager,市場上就有下載,用於設置這六類進程的管理策略。

軟件運行後有六個輸入框,在輸入框中只能輸入數字,這些數字表明瞭這類進程的處理策略,好比Foreground App下的輸入框顯示6,就表示,當可用內存低於6MB時,終止Foreground App。下面的相似,如Empty App下的輸入框顯示24,則表示,當內存低於24MB時,終止Empty App。

從軟件數值的設置不難看出結束進程的有限順序:Empty>Content Provider>Hidden>Secondary Server>Visible>Foreground。

但默認設置確存在一些問題:
各種進程的管理策略的閥值至關接近:6,8,16,20,22,24,最大的相差也不到8MB,在實際程序運行中,很容易致使多種類型的進程同時被關閉。如可用內存在25時,忽然啓動照相程序,系統可用內存急速,可能會致使空進程、內容供應節點、後臺進程、次要服務等同時被關閉
閥值上限較低:通常手機啓動後,可用內存在50-100左右,但隨着手機的使用,可用內存會逐步減小,最後下降到24MB左右,則系統開始啓動進程管理機制,開始結束進程,但這個閥限制設在了24MB,相對來講偏低。其結果會致使系統使用一段時間後,總體速度變慢。很明顯的就是,當手機長時間使用後,開啓電話撥號,相冊,照相機等應用時,系統的反應速度極慢。

基於以上幾個問題,不難看出,咱們修改的目標也將很是明確,主要解決兩個矛盾:
拉開各進程的閥值層次,使得進程管理機制能更有效得工做
提高閥值上限,空出更多的空餘內存,以提高系統總體的運行速度

進程管理策略設置原則:
前臺進程、可見進程和次要服務是與用戶體驗息息相關的內容,這部分的進程管理策略要相對保守,給這些進程留下足夠的運行空間
壓榨無用進程,騰出內存空間給主要程序使用

下面筆者總結了幾種設置方式,適應不一樣的使用須要:
遊戲玩家/重度瀏覽器使用者配置:
用戶特色:長時間專一於某一特定的,高內存需求的程序,對多任務的需求不高

配置參數:

1.Foreground:6
2.Visible:8
3.Secondary Server:16
4.Hiden App:80
5.Content Provider:90
6.Empty:100

配置理念:壓榨後臺進程,內容供應節點和空進程,將內存儘量多得留給前臺進程和系統,提高遊戲速度和瀏覽器體驗
優勢:程序啓動和運行的速度最快
缺點:多任務處理不理想,開啓程序較多時,後臺進程會被終止

多任務配置:
用戶特色:同時運行多個應用程序,須要常常在多個程序間切換

配置參數:

1.Foreground:6
2.Visible:8
3.Secondary Server:16
4.Hiden App:20
5.Content Provider:60
6.Empty:100

配置理念:壓榨空進程,給內容供應節點留有必定空間,最大限度提高後臺程序的使用空間,提高多任務的處理能力
優勢:運行多個程序時,因爲可支配內存較多,後臺程序不容易被終止
缺點:程序啓動的速度和總體系統的運行速度可能會比遊戲玩家配置略慢一些,因爲常常運行多任務,平時系統的響應速度會受到必定影響
輕度用戶/女生專用配置
用戶特色:手機的主要功能是短信和電話,偶爾用用相機自拍

配置參數:

1.Foreground:6
2.Visible:8
3.Secondary Server:16
4.Hiden App:24
5.Content Provider:32
6.Empty:48

配置理念:壓榨空進程,給內容供應節點留有必定空間,最大限度提高後臺程序的使用空間,提高多任務的處理能力
優勢:比較均衡的配置,提高了系統的可用內存,使得系統的總體速度獲得了提升,拉開了各級進程的管理策略層次,使得管理機制更有效率
缺點:比較均衡的配置,無明顯缺點iphone

相關文章
相關標籤/搜索