1. onCreate()
2. onStart()
3. onResume()
4. onPause()
5. onStop()
6. onRestart()
7. onDestroy()
這 7個方法之間的關係,可以繪製成 Activity 生命週期示意圖如下。
由上圖可知 Activity 不一定會執行所有的方法,端看應用程式的需求而定,一個 Activity 會經歷哪些方法是由 Android 系統自行管理控制,所以只要當記憶體不足,Android 系統可能會停止某一個 Activity,會依據該 Activity 的重要程度來決定是否終止執行,其重要順序如下:
1. foreground process:
2. visible process:
3. service process:
4. background process:
5. empty process:
因此在程式設計時建議設定中斷點及利用 debug 功能來觀察每個方法何時被呼叫,以確保程式不會突然被中斷造成困擾。
編: 我覺得下面這篇寫的更好, 推!!!
(史丹利部落格 http://stenlyho.blogspot.tw/2008/09/activity.html)
Android Activity生命週期簡介
何謂Activity:最簡單的就是你可以把Activity看成一個User Interface Program,原則上它會提供使用者一個互動式的介面功能,那一個activity只有一個UI嗎?當然不是囉,舉例來說:一個EMail程式,就可能包含三個activity(1)郵件列表的activity(2)顯示郵件內容的activity(3)寫新郵件或回覆郵件的activity。
所有的Activity在系統裏由Activity堆疊所管理,當一個新的Activity被執行後,它將會被放置到堆疊的最頂端,並且變成"running activity", 而先前的Activity原則上還是會存在於堆疊中,但它此時不會是在前景的情況,除非剛剛那個新的Activity離開。
一個Activity基本上有四個生命狀態
當一個Activity在螢幕的最上層時(堆疊的最頂端),它就是屬於active或running的狀態
如果一個Activity失去焦點(focus)但還看得到它的畫面(比如:一個新的Activity畫面並不是全螢幕或者它是一個半透明的情況),那失去焦點的這個Activity則處在paused的狀態。像這個失去焦點的Activity它還是完全活著的喔,並沒有消失。(活著的意思是指,Activity自已本身所有的狀態及資料都還是存在的,也跟視窗管理程式window manager保持連繫著),像這種paused的activity,會在一種情況下消失,那就是當系統的記憶體不夠用之時,系統會自動判斷,把不重要的activity移除。
如果一個Activity被其它的Activity完全的遮住時,這個被遮的Activity處於stop的狀態,它仍然保有全部的狀態及資料,但因為它已不再被使用者看見,所以它的畫面是被隱藏起來的(畫面不需要更新),當系統記憶體不足時,這種stop狀態的activity是最先被系統考慮拿來釋放記憶體的。
當一個Activity處於pause或stop的狀態時,系統可以要求Activity結束(finish)或直接移除(kill)它。當它需要再度呈現在使用者面前時,它必需要能完整的重新啟動及回復先前的狀態。
底下的流程圖呈現出一個Activity的狀態運行的情況,長方形的方塊代表著回呼函式(callback methods)你可以自已實作出在每個狀態你想要處理的事情,有顏色的部份就是實際Activity會處於的狀態。
上圖裏有三個主要迴路
(1)entire lifetime:
一個Activity的entire lifetime是由onCreate(Bundle)開始,一直到onDestroy()結束。一個Activity可以把所有的資源設定寫在onCreate裏,一直到onDestroy()時,再釋放出來。比如說,你需要一個執行緒在背景執行網路下載資料,這個thread就可以在onCreate()裏建立起來,一直到onDestroy()再把thread釋放不要用。
(2)visible lifetime:
一個Activity的visible lifetime則是指在onStart()到onStop()之間,算是"可視生命時期",在這段時間內,使用者可以在螢幕上看見Activity,要注意這個"看見"算是抽象形容詞@@這個Activity不見得一定在前景直接跟使用者可直接互動。比如說:你可以在onStart()註冊一個BroadcastReceiver用來監控並改變你的UI,當使用者不想再看你所呈現的結果時,在onStop()移除註冊的BroadcastReceiver。onStart()跟onStop()可以在activity在visible及hidden兩個狀態切換時多次被呼叫執行。
(3)foreground lifetime:
一個foreground lifetime則是指onResume()到onPause()之間,在這個時期的Activity是在所有的Activity的前面,並且直接跟使用者進行互動,所以這段時期指的就是圖裏的Activity is running囉。 一個Activity能很頻繁的在resume及pause這兩個狀態切換,比如:當一個裝置進行睡眠時,當一個Activity的結果被傳送,當一個新的intent被傳送時。所以在onResume()及onPause()裏實作的程式應盡量精簡。
看到這裏先做個小結:onCreate()用來做程式的初使化動作,onDestory()通常都拿來把onCreate()時所要來的資料做釋放的動作,onPause()時把需要保存的資料在此時保存,onResume()把保存的資料拿回來使用。
整個Activity的生命週期所用到的方法(methods)定義如下表,這些methods都可以依據你實際上的需求去繼承出來改寫它的行為。所有的Activity都會實作onCreate(Bundle)來實現他們的初使化設定;或許你也需要去實作出onPause()來保留一些資料;但請記得當你要使用這些methods時必需要做一件事情,那就是在你改寫的methods裏必需呼叫superclass相對應的methods.如:super.onCreate(Bundle)。
底下這段影片是在說明Activity Lifecycle的影片,內容有個lifecycle的demo,可以讓你對onCreate/onStart/onResume/onPause/onStop...更有感覺。
lifecycle demo的程式碼: svn://svn.sleepydog/net/guestarea/android/LifeCycleDemo
user=android_ro
password=welcome
更詳細的內容請參照
http://code.google.com/android/reference/android/app/Activity.html
http://sleepydroid.blogspot.com/
http://blip.tv/file/958450/
所有的Activity在系統裏由Activity堆疊所管理,當一個新的Activity被執行後,它將會被放置到堆疊的最頂端,並且變成"running activity", 而先前的Activity原則上還是會存在於堆疊中,但它此時不會是在前景的情況,除非剛剛那個新的Activity離開。
一個Activity基本上有四個生命狀態
底下的流程圖呈現出一個Activity的狀態運行的情況,長方形的方塊代表著回呼函式(callback methods)你可以自已實作出在每個狀態你想要處理的事情,有顏色的部份就是實際Activity會處於的狀態。
上圖裏有三個主要迴路
(1)entire lifetime:
一個Activity的entire lifetime是由onCreate(Bundle)開始,一直到onDestroy()結束。一個Activity可以把所有的資源設定寫在onCreate裏,一直到onDestroy()時,再釋放出來。比如說,你需要一個執行緒在背景執行網路下載資料,這個thread就可以在onCreate()裏建立起來,一直到onDestroy()再把thread釋放不要用。
(2)visible lifetime:
一個Activity的visible lifetime則是指在onStart()到onStop()之間,算是"可視生命時期",在這段時間內,使用者可以在螢幕上看見Activity,要注意這個"看見"算是抽象形容詞@@這個Activity不見得一定在前景直接跟使用者可直接互動。比如說:你可以在onStart()註冊一個BroadcastReceiver用來監控並改變你的UI,當使用者不想再看你所呈現的結果時,在onStop()移除註冊的BroadcastReceiver。onStart()跟onStop()可以在activity在visible及hidden兩個狀態切換時多次被呼叫執行。
(3)foreground lifetime:
一個foreground lifetime則是指onResume()到onPause()之間,在這個時期的Activity是在所有的Activity的前面,並且直接跟使用者進行互動,所以這段時期指的就是圖裏的Activity is running囉。 一個Activity能很頻繁的在resume及pause這兩個狀態切換,比如:當一個裝置進行睡眠時,當一個Activity的結果被傳送,當一個新的intent被傳送時。所以在onResume()及onPause()裏實作的程式應盡量精簡。
看到這裏先做個小結:onCreate()用來做程式的初使化動作,onDestory()通常都拿來把onCreate()時所要來的資料做釋放的動作,onPause()時把需要保存的資料在此時保存,onResume()把保存的資料拿回來使用。
整個Activity的生命週期所用到的方法(methods)定義如下表,這些methods都可以依據你實際上的需求去繼承出來改寫它的行為。所有的Activity都會實作onCreate(Bundle)來實現他們的初使化設定;或許你也需要去實作出onPause()來保留一些資料;但請記得當你要使用這些methods時必需要做一件事情,那就是在你改寫的methods裏必需呼叫superclass相對應的methods.如:super.onCreate(Bundle)。
public class Activity extends ApplicationContext { protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); }
底下這段影片是在說明Activity Lifecycle的影片,內容有個lifecycle的demo,可以讓你對onCreate/onStart/onResume/onPause/onStop...更有感覺。
lifecycle demo的程式碼: svn://svn.sleepydog/net/guestarea/android/LifeCycleDemo
user=android_ro
password=welcome
更詳細的內容請參照
http://code.google.com/android/reference/android/app/Activity.html
http://sleepydroid.blogspot.com/
http://blip.tv/file/958450/
沒有留言:
張貼留言