Android 台灣中文網

標題: Android系統記憶體不足時,組建回收順序問題 [打印本頁]

作者: 暗桌之光    時間: 2011-7-31 10:38
標題: Android系統記憶體不足時,組建回收順序問題
Android Process Lifecycle
Android系統記憶體不足時 , 就需要把舊的或不需要用的應用 程式 移除. 如同之前的 Activity 生命 週期 所介紹, 這個移除的決定是由應用 程式 所處的狀態來判斷. 一般來說,當需要移除應用 程式 時, 系統將會做排序 , 然後從最不重要的開始移除 , 以下是移除時的考量順序 :

1. 最早被移除的是 Empty Process( 空行程 ):
Empty process 是指那些沒有跟 Activity 綁定 , 也沒有跟任何的應用 程式組件 (比如 Service 或 IntentReceiver) 綁定在一起的process, 這些空行程一定是最早被系統考慮移除的 .
2. 第 2 順位考慮被移除的是 Background Activity.
Background Activity指這個 activity 是無法被使用者看到的的情況 , 表示 Activity 已處於 stop 的狀態 , 系統移除這些 Activity 是安全的 . 通常有多個 Background Activity 同時執行 , 這些 Activity 被存放在一個 LRU (least recent used) list 中 , 系統可以根據 LRU list 判斷哪些 Activity 可以被移除 , 哪一個應該是最先被移除的 .
3. 第 3 順位被移除的是 Service Process.
在 Android 應用 程式 裡, 有一種沒有 UI 的類別 (android.app.Service), 稱之為 Service. Service Process 通常是由startService() 方式啟動 . 簡單來說, Service 屬於 background( 背景 ) 程式 , 透過背景程式 , 我們可以製作一些不需要 UI 的功能 , 例如 : 在背景撥放音樂 , 上傳或下載文件等 . 系統通常會保護它 , 除非真的沒有 記憶體 可用.
4. 接著輪到 Visible Activity / Visible Process:
Visible Process是一個可被 Visible 的 , 但是沒有顯示在最上端 (onPause 被使用時 ). 舉例來說 , 當一個新的對話框 Activity 出現時 , 原來的 Activity 仍然 visible, 仍然被系統認為是重要的 , 通常不會被移除 . 但若不得不移除時 , 由於屬於 Paused 狀態 , 相對來說 , 它已經處於一個比較安全的位置 .
5. 最後被移除的是 Foreground Activity:
Foreground是一個在 螢幕 最上端與使用者做互動的Activity, 它的優先權最高 . 原則上會是最後一個被移除的 程式 , 除非這個Activity 所需要的 記憶體 大小已經超出系統所能給的. 系統之所以會移除這些程式 , 是為了不讓使用者 頁面 停止回應.
由於Android 應用 程式 的lifecycle 並不是由 程式 本身直接控制的, 而是由系統平台進行管理 . 所以對於開發者而言 , 許要瞭解不同組件 Activity, Serivce 和 IntentReceiveer 的 Lifecycle. 要切記 : 如果 組件 使用不當, 雖然正在進行重要的 Process, 仍有可能被系統主動移除 .
作者: hankar    時間: 2012-1-24 20:24
10個裡有超過兩個明白的看得懂的我頭給你敲3下...哈哈哈
作者: charonchen    時間: 2012-1-29 22:06
google 翻譯android官網的文件來的?!
作者: mosqui    時間: 2012-1-31 19:23
受用不少
謝謝大大的解說
以後發開會注意一下
作者: 超難吃    時間: 2012-2-6 22:02
感謝大大ㄉ分享唷~小ㄉ去學ㄌ




歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1