1. 程式人生 > >橫豎屏切換時activity生命週期變化的總結

橫豎屏切換時activity生命週期變化的總結

activity的生命週期變化想必大家都耳熟能詳,但是橫豎屏切換時activity生命週期變化很多人肯定還很迷糊,最近在網上查詢的資料總結的大都不全面,最後在部落格園上看到一哥們總結的挺好, so,自己也寫了個demo測試了一下,發現橫豎屏切換時activity生命週期不僅跟清單檔案AndroidManifest.xml中android:configChanges屬性有關,而且還跟手機系統的版本有關,因為在Android 4.0及其以上系統上,還跟程式的targetSdkVersion設定有關。下面放出自己的測試結果:

 一、Android 2.3

1、清單檔案中不配置android:configChanges屬性或者配置了android:configChanges="orientation",橫豎屏切換時會先銷燬當前activity然後重新建立它,而且還會呼叫onSaveInstanceState和onRestoreInstanceState方法,如下圖:


2、清單檔案中配置android:configChanges="orientation|keyboardHidden",橫豎屏切換時不會重新建立activity,而是會呼叫onConfigurationChanged方法


3、清單檔案中配置android:configChanges="orientation|keyboardHidden|screenSize",橫豎屏切換時不會重新建立activity


二、Android 4.0及以上

1、清單檔案中不配置android:configChanges屬性或者配置了android:configChanges="orientation",橫豎屏切換時的變化跟Android 2.3是一樣的,都會先銷燬當前activity然後重新建立它,如圖所示:

2、清單檔案中配置android:configChanges="orientation|keyboardHidden"
(1) 當android:targetSdkVersion<="12"時,橫豎屏切換時不會重新建立activity

(2) 當android:targetSdkVersion>"12"時,橫豎屏切換時會重新建立activity

3.清單檔案中配置android:configChanges="orientation|keyboardHidden|screenSize",不管android:targetSdkVersion為多少,橫豎屏切換時都不會重新建立activity

最後補充一點,我們通過設定android:screenOrientation屬性可以指定當前activity的螢幕方向。
    android:screenOrientation="portrait" 縱向
    android:screenOrientation="landscape" 橫向