要想横竖屏切换,不重新走Activity的生命周期我们只需要配置
android:configChanges="orientation|screenSize"
我们经常在网上看到的结论如下
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
我的测试结果
不设置Activity的android:configChanges时,
或 设置Activity的android:configChanges="orientation"时,
或设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行一次方法。
为什么会出现这个问题呢?
从 Android 3.2(API 级别 13)开始,当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。因此,在开发针对 API 级别 13 或更高版本系统的应用时,若要避免由于设备方向改变而导致运行时重启,则除了"orientation"值以外,您还必须添加 "screenSize"值。即,您必须声明 android:configChanges="orientation|screenSize"。但是,如果您的应用是面向 API 级别 12 或更低版本的系统,则 Activity 始终会自行处理此配置变更(即便是在 Android 3.2 或更高版本的设备上运行,此配置变更也不会重启 Activity)。
结论
1、Android 3.2 (API 级别 13)以前
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周
期,只会执行onConfigurationChanged方法
2、从 Android 3.2 (API级别 13)以后
1、不设置Activity的android:configChanges时,
或 设置Activity的android:configChanges="orientation"时,
或设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏会重新调用各个生命周期
,切横屏时会执行一次,切竖屏时会执行一次方法。
2、配置 android:configChanges="orientation|screenSize",才不会销毁 activity,且只调用 onConfigurationChanged方法。