橫豎屏切換時候Activity的生命週期
2、執行Activity,得到如下資訊
onCreate-->
onStart-->
onResume-->
3、切換成橫屏時
onConfigurationChanged-->
onPause-->
onSaveInstanceState-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
4、切換成豎屏時
onConfigurationChanged-->
onPause-->
onSaveInstanceState-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
5、修改AndroidManifest.xml,把該Activity新增
android:configChanges="orientation",執行步驟3
onConfigurationChanged-->
onPause-->
onSaveInstanceState-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
--------------這個時候按下-關屏鍵,列印-----------------
onPause-->
onSaveInstanceState-->
onStop-->
6、再執行步驟4,只打印了一行onConfigChanged
onConfigurationChanged-->
7、把步驟5的android:configChanges="orientation" 改成
android:configChanges="orientation|keyboardHidden",執行步驟3,列印
onConfigurationChanged-->
onPause-->
onSaveInstanceState-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
8、執行步驟4
onConfigurationChanged-->
onConfigurationChanged-->
9、把步驟7的android:configChanges="orientation|keyboardHidden" 改成
android:configChanges="orientation|keyboardHidden|screenSize",切換橫豎屏時都只打印
onConfigurationChanged-->
總結:
1、不設定Activity的android:configChanges時,切屏會重新呼叫各個生命週期,
切橫、豎屏時只會執行一次onConfigurationChanged-->
2、設定Activity的android:configChanges="orientation"時,切橫屏會重新呼叫各個生命週期,
切豎屏時只會執行onConfigurationChanged-->
注意:android:configChanges="orientation|keyboardHidden"和android:configChanges="orientation"執行效果相同
3.設定Activity的android:configChanges="orientation|keyboardHidden|screenSize"時,切橫豎屏只會執行onConfigurationChanged-->
而不會呼叫各個生命週期
總結一下整個Activity的生命週期
補充兩點,當前Activity產生事件彈出Toast和AlertDialog的時候Activity的生命
週期不會有改變
當前Activity彈出Dialog時,Acitivity的生命週期會onPause,關閉Dialog後,會onResume()
Activity執行時按下HOME鍵(跟被完全覆蓋是一樣的):onPause -->onSaveInstanceState --> onStop
再回到當前活動:onRestart -->onStart--->onResume
Back鍵和Home鍵主要區別在於是否會執行onDestroy。
Activity未被完全覆蓋只是失去焦點:onPause--->onResume