要想横竖屏切换,不重新走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生命周期方法调用return的问题
  2. android的Services生命周期和使用方法
  3. Android 进程级别 和 oom_adj对应关系
  4. Android Activity生命周期具体内容概述
  5. android中少用静态变量(android静态变量static生命周期)
  6. Android 生命周期
  7. Android Service的生命周期及使用!
  8. Android 各 api 级别与ndk 原生 api对照表

随机推荐

  1. android关于EditText取消默认焦点及触摸
  2. react-natvie vscode真机调试[Android]
  3. Android(安卓)HTTPS认证之Volley封装
  4. 如何实现手势缩放图片
  5. Android(安卓)SDK下载和更新失败的解决方
  6. android 自定义ButtonTab , ActivityGrou
  7. 搭建Android开发环境
  8. android开发环境搭建备忘
  9. android 播放视频 Android(安卓)播放音频
  10. Android(安卓)BroadcastReceiver介绍