屏幕旋轉後Activity生命週期

主要針對屏幕旋轉對 Activity 生命週期有何影響。java

第一種狀況

在沒有其它配置的狀況下,經過日誌打印屏幕旋轉會調用的方法。android

//onPause()----onStop()-----onDestroy()-----onCreate() ---- onStart()---onResume()
複製代碼

第二種狀況

關於 android:configChanges 的配置,不一樣的值對生命週期也會有不一樣的影響。這個值最經常使用的值包括: orientationkeyboardHidden, 分別用於避免因屏幕方向和可用鍵盤改變而致使的重啓。ide

例如:ui

<activity android:name=".MainActivity"
            android:configChanges="orientation|keyboardHidden" / >
複製代碼

當其中一個配置發生變化時, MainActivity 不會重啓。 可是會收到 onConfigurationChanged() 的調用。向此方法傳遞 Configuration 對象指定新設備配置。能夠經過讀取 Configuration 中的字段,肯定新配置。而後經過更新界面中使用的資源進行適當的更改。調用此方法時,Activity 的 Resources 對象會相應的進行更新,以根據新配置返回資源,這樣,就可以在系統不重啓 Activity 的狀況下輕鬆重置 UI 的元素。spa

可是,個人編譯版本高一些,實驗,發現當配置以上configChanges 仍是會重啓 Activity, 而且沒有回調 onConfigurationChanged() 的回調日誌

然後,開始查閱文檔說明,發現:code

注意: 在Android3.2(API 13)開始,當設備在縱向和橫向之間切換時, 「屏幕尺寸」也會發生改變,所以,在開發針對 API 13或者更高版本的應用時(固然咱們如今基本都是4.0 以上),若要避免因爲設備方向改變而致使運行時重啓,則除了 "orientation" 值之外,還必須添加 "screenSize" 值, 也就是說,您必須聲明:android:configChanges="orientation|screenSize".
複製代碼

當添加新的配置 screenSize 以後,屏幕旋轉回調以下:對象

// onConfigurationChanged invoked... 只會調用onConfigurationChanged() 方法,並無重啓
複製代碼

最後就是一些資源的變動,若是有些圖像應該在橫向和縱向之間切換,就必須在 onConfigurationChanged() 期間將每一個資源從新分配給每一個元素。生命週期

文檔地址:https://developer.android.com/guide/topics/resources/runtime-changes?hl=zh-cn資源

相關文章
相關標籤/搜索