android:configChanges 横竖屏切换的生命周期

要想横竖屏切换,不重新走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方法。


你可能感兴趣的:(android:configChanges 横竖屏切换的生命周期)