不做強迫癥:Android多任務(wù)機制科普
為什么不需要清內(nèi)存?
想當(dāng)年,清內(nèi)存的習(xí)慣由來已久。在 Android 還沒出生,我們使用 Windows 時,總巴不得把所有沒有用到的進程關(guān)掉,這樣才不會“占 內(nèi)存”,不會“占 CPU ”,電腦才不會“卡”。(大部分的“安全軟件”就是靠幫用戶在 Windows 上清內(nèi)存,清垃圾而揚名)這算是清內(nèi)存的歷史原因。然而 Android 跟 Windows 相比,是完全不同的內(nèi)存管理機制…
背景:
Android 基于 Linux 的內(nèi)核,繼承并改進了 Linux 的內(nèi)存管理機制。
Android 的內(nèi)存管理機制:
- 有多少內(nèi)存就用多少,空閑內(nèi)存全部當(dāng)緩存。也就是,當(dāng)一個進程停止活動,Windows 會把它從內(nèi)存中清除,但Android會把進程保留在內(nèi) 存里,這樣下次啟動時就會非???,因為省去了再次從儲存設(shè)備讀取的時間,只有當(dāng)內(nèi)存不足以啟動一個新進程時,Android 才會清除某些駐留在內(nèi)存中停 止活動的進程。
- 每個進程以 Java 虛擬機獨立存在,互不干擾。確保 Android 的穩(wěn)定性,正常情況下即使單個進程崩潰,整個系統(tǒng)也不會崩潰,也永遠(yuǎn)沒有內(nèi)存不足的提示出現(xiàn)。
以上,可以解釋 Android 剩余內(nèi)存總是很少的原因。“但是,進程在后臺運行會耗電耗流量的?。?rdquo;這個繼續(xù)解釋……
Android 的多任務(wù)機制:
當(dāng)進程被切換到后臺時,系統(tǒng)暫停進程。不消耗cpu資源,只在內(nèi)存保留運行狀態(tài),并根據(jù)應(yīng)用本身設(shè)置優(yōu)先級。
七個優(yōu)先級:
- 前臺進程。顧名思義,你當(dāng)前屏幕正在顯示的進程。
- 可見進程。隨時需要待命的進程,例如隨時需要召喚出來的輸入法。
- 主要服務(wù)。系統(tǒng)的必須服務(wù),例如電話。
- 次要服務(wù)。與系統(tǒng)關(guān)系密切的服務(wù),例如 Gmail 的郵件推送服務(wù)。
- 后臺進程。同樣顧名思義,就是剛剛被你切換到后臺的進程。
- 內(nèi)容供應(yīng)節(jié)點。沒有應(yīng)用實體,僅提供內(nèi)容供別的應(yīng)用去用的,比如日歷供應(yīng)節(jié)點,郵件供應(yīng)節(jié)點等。
- 空進程。沒有任何東西在運行的進程,有些應(yīng)用在退出后,依然會在進程中駐留一個空進程,這樣的作用是提高該應(yīng)用下次的啟動速度或記錄一些歷史信息.
結(jié)論
綜上,正常的用戶應(yīng)用在退出之后要不就成為后臺進程,要不就成為空進程。這些進程已經(jīng)暫停了運行,不占用 CPU 資源和電量。在內(nèi)存不足,用戶需 要打開另外的應(yīng)用時,就會自動清除掉,所以完全不需要清理內(nèi)存。相反有時清理了內(nèi)存之后系統(tǒng)反而需要用大量的電量和 CPU 去重啟必要的進程。
可是為什么有些應(yīng)用在關(guān)掉了之后仍然會耗費電量和流量呢?***的答案是,這是一個不安分的應(yīng)用。應(yīng)用作者在寫應(yīng)用的時候就為應(yīng)用申請了各種各樣的主 要服務(wù)和次要服務(wù),導(dǎo)致用戶退出后仍然繼續(xù)運行。(所以后臺運行最牢固的就是那些在你下拉通知欄的“XX電池醫(yī)生”和“XX手機助手”。)這種現(xiàn)象在一些 國產(chǎn)應(yīng)用上尤其常見。面對這些亂七八糟的沒良心的應(yīng)用和應(yīng)用作者,果斷把它卸載并沖到臭水溝里面去吧,差評!