1. 程式人生 > >安卓四大元件之Activity學習

安卓四大元件之Activity學習

在安卓中各大控制元件都要依附Activity來完成與使用者的互動,Activity(活動)作為控制元件的平臺。介面的實現都要用到Activity,簡單的說Activity就是安卓的UI部分。

Activity的生命週期

一個Activity的建立與銷燬要經歷一下幾個方法:

onCreate -> onStart -> onResume :新的Activity第一次建立

onPause -> onStop -> onCreate -> onStart -> onResume :  新的Activity啟動

onPause -> onStop -> onDestory : 第二個Activity執行退出 onRestart -> onStart -> onResume : 第一個Activity執行

當一個Activity因為系統記憶體不足而要被銷燬時資料資訊可以在onSaveInstanceState()中儲存,此方法在onPause之前被呼叫。(儲存View的狀態)

onCreate:第一次建立Activity時呼叫 ,我們一般重寫此方法,在裡面進行一些資料初始化,設定使用者介面的工作。

onStart:當Activity處於可見狀態的時候。

onResume:當Activity得到使用者焦點,也就是說Activity準備好與使用者進行互動時執行。

onRestart:Activity沒有被銷燬重新呼叫這個Activity時。

onPause:Activity失去使用者焦點也就是當前Activity不能與使用者進行互動時或者說當前Activity被遮擋時。

onStop:Activity處於不可見狀態時。

onDestroy:Activity被銷燬時。

需要注意的是這其中有一種情況就是螢幕旋轉的問題,當用戶旋轉手機螢幕,每一次都會導致activity的銷燬和重新建立。

在橫豎屏切換時如果不設定Activity的ConfigChanges屬性切屏會重新呼叫各個生命週期,切橫屏會執行一次,切豎屏會執行二次。設定Android:ConfigChanges屬性為"orientation"時切屏還是會重新呼叫各個生命週期,切橫豎屏時都只會呼叫一次。設定Android:configChanges屬性為orientation/keyboardHidden時切橫豎屏不會呼叫各個生命週期,只會執行onConfigurationChanged方法


在這種情況下,儘管實際的activity例項已經被銷燬,但是系統仍然記得它的存在,當用戶返回到它的時候,系統會創建出一個新的例項來代替它,這裡需要利用舊例項被銷燬時候存下來的資料。這些資料被稱為“instance state”,是一個存在Bundle物件中的鍵值對集合。

預設狀態下,系統會把每一個View物件儲存起來(比如EditText物件中的文字,ListView中的滾動條位置等),即如果activity例項被銷燬和重建,那麼不需要你編碼,layout狀態會恢復到前次狀態。

但是如果你的activity需要恢復更多的資訊,比如成員變數資訊,則需要自己動手寫了。


Activity的四種啟動方式

分別為Standard、singleTop、singleTask、singleInstance

1.standard:每次啟用Activity都會建立一個Activity並放入任務棧中。

2.singleTop:若在任務棧頂剛好存在該Activity的例項,就重用該例項。若不存在,則重新建立一個Activity放入任務棧中。(即使任務棧中存在該例項,只要不要棧頂都會重新建立一個Actitivy放入任務棧頂)雖然不會建立新的Actitvity但是每次都會呼叫onNewIntent()方法.

3.singleTask:若在該任務棧中存在該例項,則將該Activity例項之上的例項全部移出棧,讓該例項回到棧頂得到重用,若任務棧中沒有該例項,則建立一個Activity壓入棧頂。

4.singleInstance:獨享任務棧模式,類似於瀏覽器。系統建立一個新的任務棧只存放這一個Actitivy例項,其他Activity或應用共享此例項。

天道酬勤