主要針對屏幕旋轉對 Activity 生命週期有何影響。java
在沒有其它配置的狀況下,經過日誌打印屏幕旋轉會調用的方法。android
//onPause()----onStop()-----onDestroy()-----onCreate() ---- onStart()---onResume()
複製代碼
關於 android:configChanges
的配置,不一樣的值對生命週期也會有不一樣的影響。這個值最經常使用的值包括: orientation
和 keyboardHidden
, 分別用於避免因屏幕方向和可用鍵盤改變而致使的重啓。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資源