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


更多相关文章

  1. Android横竖屏切换小结
  2. ListView使用技巧(二):相关设置
  3. android布局layout中的一些属性
  4. [Android]新功能引导高亮显示遮罩层View
  5. Android(安卓)MediaCodec H264编码设置Main Profile & High Prof
  6. Android(安卓)关于RatingBar评分条
  7. android布局layout中的一些属性
  8. android设置跑马灯效果
  9. android背景选择器selector用法汇总

随机推荐

  1. JavaScript算法题:查找数字在数组中的索引
  2. LVS DR模式
  3. windows10家庭版更改登录用户名
  4. LVS NAT模式
  5. JS中Object.freeze()与Const之间的区别[
  6. redis 6.0源码安装
  7. Ansible 之 ansible-doc模块文档说明
  8. 硬货来了!轻松掌握 MongDB 流式聚合操作
  9. JavaScript引擎是如何工作的?从调用栈到Pr
  10. WebSockets实战:在 Node 和 React 之间进