科普:Android的多任務機制
轉貼來的:
想當年,清內存的習慣由來已久。在Android還沒出生,我們使用Windows 時,總巴不得把所有沒有用到的進程關掉,這樣才不會“佔內存”,不會“佔CPU ”,電腦才不會“卡”。(大部分的“安全軟件”就是靠幫用戶 在Windows上清內存,清垃圾而揚名)這算是清內存的歷史原因。然而Android跟Windows 相比,是完全不同的內存管理機制…(PS :Android基於Linux的內核,繼承並改進了Linux的內存管理機制。) Android的內存管理機制: 有多少內存就用多少,空閒內存全部當緩存。也就是,當一個進程停止活動,Windows 會把它從內存中清除,但Android會把進程保留在內存裡,這樣下次啟動時就會非常快,因為省去了再次從儲存設備讀取的時間,只有當內存不足以啟動一個新進程時,Android才會清除某些駐留在內存中停止活動的進程。 每個進程以Java虛擬機獨立存在,互不幹擾。確保Android的穩定性,正常情況下即使單個進程崩潰,整個系統也不會崩潰,也永遠沒有內存不足的提示出現。 以上,可以解釋Android剩餘內存總是很少的原因。“但是,進程在後台運行會耗電耗流量的啊?”這個繼續解釋…… Android的多任務機制: 當進程被切換到後台時,系統暫停進程。不消耗cpu資源,只在內存保留運行狀態,並根據應用本身設置優先級。 七個優先級: - 前台進程。顧名思義,你當前螢幕正在顯示的進程。 - 可見進程。隨時需要待命的進程,例如隨時需要召喚出來的輸入法。 - 主要服務。系統的必須服務,例如電話。 - 次要服務。與系統關係密切的服務,例如Gmail的郵件推送服務。 - 後台進程。同樣顧名思義,就是剛剛被你切換到後台的進程。 - 內容供應節點。沒有應用實體,僅提供內容供別的應用去用的,比如日曆供應節點,郵件供應節點等。 - 空進程。沒有任何東西在運行的進程,有些應用在退出後,依然會在進程中駐留一個空進程,這樣的作用是提高該應用下次的啟動速度或記錄一些歷史信息。 結論 綜上,正常的用戶應用在退出之後要不就成為後台進程,要不就成為空進程。這些進程已經暫停了運行,不佔用CPU 資源和電量。在內存不足,用戶需要打開另外的應用時,就會自動清除掉,所以完全不需要清理內存。相反有時清理了內存之後系統反而需要用大量的電量和CPU 去重啟必要的進程。 可是為什麼有些應用在關掉了之後仍然會耗費電量和流量呢?唯一的答案是,這是一個不安分的應用。應用作者在寫應用的時候就為應用申請了各種各樣的主要服務和次要服務,導致用戶退出後仍然繼續運行。
|