2008年9月11日 星期四

Android Process Lifecycle(行程生命週期)

Process Lifecycle(行程生命週期)

除了Activity Lifecycle之外,Android還有一段Process Lifecycle的說明如下:

Android系統基本上都會盡量的維持應用程式的運作,但如果記憶體真的不夠用時,就會需要把舊的或不需要用的應用程式移除。 就如同之前的Activity生命週期所介紹,這個移除的決定是由應用程式所處的狀態來判斷。一般來說,一個應用程式有四個狀態,底下由最重要到不重要的順序列出這四個狀態。 當需要移除應用程式時系統將會自已做排序,然後從最不重要的開始移除。

  1. Foreground Activity(這個activity就是在螢幕最頂端,是目前跟使用者保持互動)所以它的優先權最高,原則上會是一個最後被移除的程式,除非,這個Activity所需要的記憶體大小已經超出系統所能給與的了。

  2. Visible Activity(這個activity是可以被使用者看見,但並不是最頂端的一個程式,比如說:最頂端的程式並不是全螢幕的,或者是有個對話盒跳出來時),所以它的權重也很高,非到必要的情況,也不會去移除這種activity。

  3. Background Activity(這個activity是無法被使用者看到的的情況,並且已處於pause的狀態)這種情況下的應用程式就沒上面兩種情況處於那麼重要的位置,所以當系統需要把更多的記憶體空間分配給foreground或visible process時,系統就可以考慮把background activity給安全的移除掉。如果說這個background activity就移除了,使用者又操作了返回這個已被移除的activity時,這個activity就會把savedInstanceState並執行onCreate(Bundle),savedInstanceState是來自於當activity被移除時所會執行的onSaveInstanceState(Bundle)所儲存起來的。

  4. Empty Process這個所謂的空行程指的是那些沒有跟Activity綁定在一起的行程,也沒有跟任何的應用程式元件(比如Service或BroadcastReceiver)綁定在一起,這些空行程一定是最最最快被系統優先考慮移除的,所以如果你真的必需要用到Service/BroadcastReceiver這些功能時,你一定要把他們給你的activity綁在一起,否則系統會認為它不重要而去移除它。
有時候有些Activity可能會需要執行較長時間的操作,而且希望這個操作可以是一個較特別的activity生命週期。比如說一個攝影機的應用程式,它允許使用者上傳相片到網站去,這個上傳的時間可能需要蠻長的,這種情況下這個應用程式應要可以讓使用者離開這個應用程式,但上傳程式還必需繼續運作,要實現這種功能,你的應用程式就必需啟動一個Service用它來負責上傳的功能。 在這種情況下呢,你可以把這個上傳功能的service看成是比non-visible activity再重要一點的地位。

資料來源:
http://code.google.com/android/reference/android/app/Activity.html

2 則留言:

呆呆怡的軌跡 提到...

講解的很清楚...讚!!

史丹利 提到...

^^謝謝啦,我也只是把官方文件翻譯出來讓大家看一下而以,沒什麼啦^^

一個小故事讓我們明白資金流通的意義

“又是炎熱小鎮慵懶的一天。太陽高掛,街道無人,每個人都債台高築,靠信用度日。這時,從外地來了一位有錢的旅客,他進了一家旅館,拿出一張1000 元鈔票放在櫃檯,說想先看看房間,挑一間合適的過夜,就在此人上樓的時候---- 店主抓了這張1000 元鈔,跑到隔壁屠戶那裡支付了他欠的肉錢...