Android橫豎屏切換+ConfigChanges屬性對Activity的生命週期影響

在Activity中添加了 android:configChanges屬性,目的是當所指定屬性(Configuration Changes)發生改變時,通知程序調用 onConfigurationChanged()函數。java

經過一個例子來介紹:android

一、運行一個新建的Activity
函數

onCreate-->
onStart-->
onResume-->

二、按crtl+f12切換成橫屏時
spa

onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->

三、再按crtl+f12切換成豎屏時,發現打印了兩次相同的log
code

onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->

四、修改AndroidManifest.xml,把該Activity添加 android:configChanges="orientation",執行步驟2
xml

onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->

五、再執行步驟3,發現不會再打印相同信息,但多打印了一行onConfigChanged
生命週期

onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
onConfigurationChanged-->

六、把步驟4的android:configChanges="orientation" 改爲 android:configChanges="orientation|screenSize|keyboardHidden"(sdk>13時需加上screenSize),執行步驟2,就只打印onConfigChanged
get

onConfigurationChanged-->

七、執行步驟3
it

onConfigurationChanged-->
onConfigurationChanged-->


 總結:
一、不設置Activity的android:configChanges時,切屏會從新調用各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次。
二、設置Activity的android:configChanges="orientation"時,切屏仍是會從新調用各個生命週期,切橫、豎屏時只會執行一次。
三、設置Activity的android:configChanges="keyboardHidden"時,切屏仍是會從新調用各個生命週期,切橫、豎屏時只會執行一次。
四、設置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會從新調用各個生命週期,只會執行onConfigurationChanged方法,可是,自從Android 3.2(API 13),在設置Activity的android:configChanges="orientation|keyboardHidden"後,仍是同樣會從新調用各個生命週期的。由於screen size也開始跟着設備的橫豎切換而改變。因此,在AndroidManifest.xml裏設置的MiniSdkVersion和 TargetSdkVersion屬性大於等於13的狀況下,若是你想阻止程序在運行時從新加載Activity,除了設置"orientation", 你還必須設置"ScreenSize",才不會從新調用各個生命週期,只會執行onConfigurationChanged方法例如:android:configChanges="orientation|screenSize|keyboardHidden"。
io

五、屬性值,用「|」符號分隔開:

相關文章
相關標籤/搜索