除了Activity Lifecycle之外,Android還有一段Process Lifecycle的說明如下:
Android系統基本上都會盡量的維持應用程式的運作,但如果記憶體真的不夠用時,就會需要把舊的或不需要用的應用程式移除。 就如同之前的Activity生命週期所介紹,這個移除的決定是由應用程式所處的狀態來判斷。一般來說,一個應用程式有四個狀態,底下由最重要到不重要的順序列出這四個狀態。 當需要移除應用程式時系統將會自已做排序,然後從最不重要的開始移除。
- Foreground Activity(這個activity就是在螢幕最頂端,是目前跟使用者保持互動)所以它的優先權最高,原則上會是一個最後被移除的程式,除非,這個Activity所需要的記憶體大小已經超出系統所能給與的了。
- Visible Activity(這個activity是可以被使用者看見,但並不是最頂端的一個程式,比如說:最頂端的程式並不是全螢幕的,或者是有個對話盒跳出來時),所以它的權重也很高,非到必要的情況,也不會去移除這種activity。
- Background Activity(這個activity是無法被使用者看到的的情況,並且已處於pause的狀態)這種情況下的應用程式就沒上面兩種情況處於那麼重要的位置,所以當系統需要把更多的記憶體空間分配給foreground或visible process時,系統就可以考慮把background activity給安全的移除掉。如果說這個background activity就移除了,使用者又操作了返回這個已被移除的activity時,這個activity就會把savedInstanceState並執行onCreate(Bundle),savedInstanceState是來自於當activity被移除時所會執行的onSaveInstanceState(Bundle)所儲存起來的。
- Empty Process這個所謂的空行程指的是那些沒有跟Activity綁定在一起的行程,也沒有跟任何的應用程式元件(比如Service或BroadcastReceiver)綁定在一起,這些空行程一定是最最最快被系統優先考慮移除的,所以如果你真的必需要用到Service/BroadcastReceiver這些功能時,你一定要把他們給你的activity綁在一起,否則系統會認為它不重要而去移除它。
資料來源:
http://code.google.com/android/reference/android/app/Activity.html
2 則留言:
講解的很清楚...讚!!
^^謝謝啦,我也只是把官方文件翻譯出來讓大家看一下而以,沒什麼啦^^
張貼留言