横竖屏切换时候Activity的生命周期
总结:
- 不设置 Activity 的 android:configChanges 时, 切屏会重新调用各个生命周期, 切横屏时会执行一次, 切竖屏时会执行两次.
- 设置 Activity 的 android:configChanges="orientation" 时, 切屏还是会重新调用各个生命周期, 切横\/竖屏时只会执行一次.
- 设置 Activity 的 android:configChanges="orientation|keyboardHidden" 时, 切屏不会重新调用各个生命周期, 只会执行onConfigurationChanged方法
Activity 会自己管理配置的变化. 当运行的时候, 配置变了, 它会自己关闭并重新启动, 但是如果设置了 android:configChanges="某一个配置", 它就不会在这个配置发生改变时重新启动.
具体过程
- 新建一个Activity,并把各个生命周期打印出来
- 运行Activity,得到如下信息onCreate-->onStart-->onResume-->
- 切换成横屏时onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume-->
- 再切换成竖屏时,发现打印了两次相同的logonSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume-->onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume
- 修改AndroidManifest.xml, 把该 Activity 添加 android:configChanges="orientation"onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume-->
- 再执行步骤4, 发现不会再打印相同信息, 但多打印了一行 onConfigChangedonSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume-->onConfigurationChanged-->
- 把步骤5的 android:configChanges="orientation" 改成 android:configChanges="orientation|keyboardHidden",执行步骤3, 就只打印onConfigChangedonConfigurationChanged-->
- 执行步骤4onConfigurationChanged-->onConfigurationChanged-->
只竖屏显示 android:screenOrientation="portrait"只横屏显示 android:screenOrientation="landscape"