不做強迫癥——Android多任務機制科普

jopen 10年前發布 | 10K 次閱讀 Android

  為什么不需要清內存?

  想當年,清內存的習慣由來已久。在 Android 還沒出生,我們使用 Windows 時,總巴不得把所有沒有用到的進程關掉,這樣才不會“占內存”,不會“占 CPU ”,電腦才不會“卡”。(大部分的“安全軟件”就是靠幫用戶在 Windows 上清內存,清垃圾而揚名)這算是清內存的歷史原因。然而 Android 跟 Windows 相比,是完全不同的內存管理機制…

  背景:

  Android 基于 Linux 的內核,繼承并改進了 Linux 的內存管理機制。

  Android 的內存管理機制:

  1. 有多少內存就用多少,空閑內存全部當緩存。也就是,當一個進程停止活動,Windows 會把它從內存中清除,但 Android 會把進程保留在內存里,這樣下次啟動時就會非常快,因為省去了再次從儲存設備讀取的時間,只有當內存不足以啟動一個新進程時,Android 才會清除某些駐留在內存中停止活動的進程。
  2. 每個進程以 Java 虛擬機獨立存在,互不干擾。確保 Android 的穩定性,正常情況下即使單個進程崩潰,整個系統也不會崩潰,也永遠沒有內存不足的提示出現。
  3. </ol>

      以上,可以解釋 Android 剩余內存總是很少的原因。“但是,進程在后臺運行會耗電耗流量的啊?”這個繼續解釋……

      Android 的多任務機制:

      當進程被切換到后臺時,系統暫停進程。不消耗 cpu 資源,只在內存保留運行狀態,并根據應用本身設置優先級。

      七個優先級:

    1. 前臺進程。顧名思義,你當前屏幕正在顯示的進程。
    2. 可見進程。隨時需要待命的進程,例如隨時需要召喚出來的輸入法。
    3. 主要服務。系統的必須服務,例如電話。
    4. 次要服務。與系統關系密切的服務,例如 Gmail 的郵件推送服務。
    5. 后臺進程。同樣顧名思義,就是剛剛被你切換到后臺的進程。
    6. 內容供應節點。沒有應用實體,僅提供內容供別的應用去用的,比如日歷供應節點,郵件供應節點等。
    7. 空進程。沒有任何東西在運行的進程,有些應用在退出后,依然會在進程中駐留一個空進程,這樣的作用是提高該應用下次的啟動速度或記錄一些歷史信息.
    8. </ol>

        結論

        綜上,正常的用戶應用在退出之后要不就成為后臺進程,要不就成為空進程。這些進程已經暫停了運行,不占用 CPU 資源和電量。在內存不足,用戶需要打開另外的應用時,就會自動清除掉,所以完全不需要清理內存。相反有時清理了內存之后系統反而需要用大量的電量和 CPU 去重啟必要的進程。

        可是為什么有些應用在關掉了之后仍然會耗費電量和流量呢?唯一的答案是,這是一個不安分的應用。應用作者在寫應用的時候就為應用申請了各種各樣的主要服務和次要服務,導致用戶退出后仍然繼續運行。(所以后臺運行最牢固的就是那些在你下拉通知欄的“XX 電池醫生”和“XX 手機助手”。)這種現象在一些國產應用上尤其常見。面對這些亂七八糟的沒良心的應用和應用作者,果斷把它卸載并沖到臭水溝里面去吧,差評!

        本文作者/Dayis.Zerro 節選自《綠色守護——取代你那阻礙生產力的清內存應用

      來自: 雷鋒網
       本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
       轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
       本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!