1. 程式人生 > >橫豎屏切換時候Activity的生命週期

橫豎屏切換時候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