Activity的生命週期

Activity的幾種生命週期

這裏寫圖片描述

根據上圖可以看出活動的生命週期是一一對應的:

onCreate()—onDestroy()
onStart()—onStop()
onResume()—onPause()
還有個onRestart()沒有對應的,下面會介紹到

下面按生命週期執行的順序來介紹:

1.onCreate() 當Activity第一次創建的時候調用。
2.onRestart() 當Activity不可見後,但是沒銷燬又重新可見就會調用,後面一定會執行onStart()方法。
3.onStart() 當Activity可見的時候調用。
4.onResume() 當Activity獲取焦點能與用戶交互的(也就是可以點擊的)時候調用。
5.onPause() 當Activity失去焦點,不能與用戶交互的(也就是不可點擊的)時候調用。
6.onStop() 當Activity不可見的時候調用。
7.onDestroy() 當Activity銷燬的時候調用。

下面來舉例說明

Activity_A跳轉到Activity_B,Acctivity_A的生命週期

首先Activity_A的生命週期是:onCreate()–onStart()–onResume()
跳轉到Activity_B分2種情況:
1.當Activity_B是透明化或者窗口化時,Activity_A的生命週期走onPause()方法,再按返回鍵時Activity_A的生命週期走onResume()方法。
2.當Activity_B是全屏且非透明狀態時,Activity_A的生命週期走onPause()–onStop()方法,再按返回鍵時Activity_A的生命週期走onRestart()–onStart()–onResume()方法。
如果不是活動跳轉,直接按Home鍵,Activity的生命週期跟上面第二種情況一樣(全屏非透明狀態)區別就是不是按返回鍵回到Activity_A,而是按任務鍵回到Activity_A。

橫豎屏切換Activity的生命週期

(1)設置 android:configChanges=”orientation” 和不設置這個屬性,這兩個效果是一樣的,activity都是重新創建

(2)橫屏切豎屏,以及豎屏切回橫屏,這兩個也是一樣的(如下總結),不會出現網上說的橫屏切回豎屏時,生命週期執行兩遍的問題
1)重新創建activity的生命週期
a)2.3上:onSaveInstanceState–onPause–onStop–onCreate-onStart–onRestoreInstanceState–onResume
b)4.0上(3.2我沒測試,只測試了4.0的):onPause–onSaveInstanceState–onStop–onCreate–onStart–onRestoreInstanceState–onResume
2)不重新創建activity,只會調用 onConfigurationChanged

(3)targetSdkVersion會影響生命週期,targetSdkVersion在12及以下的話,設置了 android:configChanges=”orientation|keyboardHidden” ,在機器上都不會重新創建activity,只會調用 onConfigurationChanged,如果設置targetSdkVersion<12的話,只在sdkVersion<=12的機器上有效果,>12的機器上activity還是會重新創建(需要加上screenSize纔有效果)

(4)android2.3和android4.0的生命週期不一樣,2.3是先onSaveInstanceState,後onPause,4.0是先onPause,後onSaveInstanceState(這個我表示不想吐槽了)

總結

(1)設置 android:configChanges=”orientation” 和不設置這個屬性,生命週期表現爲重新創建activity

(2)設置 android:configChanges=”orientation|keyboardHidden”,在2.3上表現爲不重新創建activity,4.0如下:
a)android:targetSdkVersion<=”12”,生命週期表現爲不重新創建activity
b)android:targetSdkVersion>”12”,表現爲重新創建activity

(3)設置 android:configChanges=”orientation|keyboardHidden|screenSize”,在2.3和4.0上都表現爲不重新創建

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章