关于Android手机横竖屏切换时Activity的生命周期问题,网上有很多相似的文章,大多数都是说明在竖屏切换横屏时Activity会重启一次,而在横屏切换竖屏时Activity会重启两次。

我本身不太理解这样设计的意义,并且觉得新版本会解决这个问题,所以做了一项测试,测试环境为Android 7.0模拟器。

测试首先创建一个新的Activity,并在其各个生命周期方法内打印日志,并执行如下操作得到结果:

targetSdkVersion的值大于12时

  1. Activity启动

    I/System.out: onCreate
    I/System.out: onStart
    I/System.out: onResume
  2. 竖屏切换为横屏

    I/System.out: onConfigurationChanged
    I/System.out: onPause
    I/System.out: onSaveInstanceState
    I/System.out: onStop
    I/System.out: onDestroy
    I/System.out: onCreate
    I/System.out: onStart
    I/System.out: onRestoreInstanceState
    I/System.out: onResume
  3. 横屏切回竖屏

    I/System.out: onConfigurationChanged
    I/System.out: onPause
    I/System.out: onSaveInstanceState
    I/System.out: onStop
    I/System.out: onDestroy
    I/System.out: onCreate
    I/System.out: onStart
    I/System.out: onRestoreInstanceState
    I/System.out: onResume
  4. 配置android:configChanges="orientation|screenSize"后,竖屏切换为横屏

    I/System.out: onConfigurationChanged
  5. 配置android:configChanges="orientation|screenSize"后,横屏切回竖屏

    I/System.out: onConfigurationChanged

targetSdkVersion的值小于或等于12时

  1. Activity启动

    I/System.out: onCreate
    I/System.out: onStart
    I/System.out: onResume
  2. 竖屏切换为横屏

    I/System.out: onConfigurationChanged
    I/System.out: onPause
    I/System.out: onSaveInstanceState
    I/System.out: onStop
    I/System.out: onDestroy
    I/System.out: onCreate
    I/System.out: onStart
    I/System.out: onRestoreInstanceState
    I/System.out: onResume
  3. 横屏切回竖屏

    I/System.out: onConfigurationChanged
    I/System.out: onPause
    I/System.out: onSaveInstanceState
    I/System.out: onStop
    I/System.out: onDestroy
    I/System.out: onCreate
    I/System.out: onStart
    I/System.out: onRestoreInstanceState
    I/System.out: onResume
  4. 配置android:configChanges="orientation"后,竖屏切换为横屏

    I/System.out: onConfigurationChanged
  5. 配置android:configChanges="orientation"后,横屏切回竖屏

    I/System.out: onConfigurationChanged

总结

可以发现新版本Android设备上的运行结果和网上的结论并不完全相同,在横竖屏切换时,都会调用一次onConfigurationChanged,并重启Activity一次,具体的生命周期为:

I/System.out: onConfigurationChanged
I/System.out: onPause
I/System.out: onSaveInstanceState
I/System.out: onStop
I/System.out: onDestroy
I/System.out: onCreate
I/System.out: onStart
I/System.out: onRestoreInstanceState
I/System.out: onResume

targetSdkVersion的值小于或等于12时,配置android:configChanges="orientation"
targetSdkVersion的值小于或等于12时,配置android:configChanges="orientation|screenSize"
可以做到拦截Activity的重新创建:

I/System.out: onConfigurationChanged

后续

将会对过去版本的Android设备做相应的测试,来验证得到结果。

Android横竖屏切换的生命周期相关推荐

  1. 你还在问android横竖屏切换的生命周期?

    本文原创,转载请注明来自xiaoQLu http://www.cnblogs.com/xiaoQLu/p/3324503.html 开源帮助android获得了飞速的发展,开源也导致了数不清的碎片问题 ...

  2. android横竖屏切换方法,Android横竖屏切换的生命周期

    关于Android手机横竖屏切换时Activity的生命周期问题,网上有很多相似的文章,大多数都是说明在竖屏切换横屏时Activity会重启一次,而在横屏切换竖屏时Activity会重启两次. 我本身 ...

  3. android屏幕旋转生命周期,Activity、Fragment生命周期---横竖屏切换的生命周期

    先贴出一张大家众所周知activity流程图 onCreate():创建Activity调用,用于Activity的初始化,还有个Bundle类型的参数,可以访问以前存储的状态.onStart():A ...

  4. android 屏幕横竖屏切换时生命周期运行详解,创建横屏layout,has no declaration in the base

    横屏代码 1.配置文件设置 android:screenOrientation="landscape" 2.java代码设置 setRequestedOrientation(Act ...

  5. android 横竖屏幕切换,Android 横竖屏切换总结

    一.Android切换横竖屏 应用的横竖屏设置 应用的横竖屏设置主要是通过Activity的screenOrientation属性控制,属性值如下: 主要有以下两种方式设置screenOrientat ...

  6. android横竖屏切换动画,横竖屏切换时候Activity的生命周期

    曾经遇到过一个面试题,让你写出横屏切换竖屏Activity的生命周期.现在给大家分析一下他切换时具体的生命周期是怎么样的: 1.新建一个Activity,并把各个生命周期打印出来 2.运行Activi ...

  7. Android 横竖屏切换

    2019独角兽企业重金招聘Python工程师标准>>> Android开发中,大多APP可能根据实际情况直接将APP的界面方向设死了,或竖屏或横屏.但是,我们还是会遇到横竖屏切换的功 ...

  8. Android横竖屏切换

    尊重原创,本文转载自 http://www.cnblogs.com/franksunny/p/3714442.html Android横竖屏切换小结 (老样子,图片啥的详细文档,可以下载后观看 htt ...

  9. android横竖屏切换总结

    Android横竖屏切换总结 (老样子,图片啥的详细文档,可以下载后观看 http://files.cnblogs.com/franksunny/635350788930000000.pdf) And ...

最新文章

  1. CVPR2021 图像匹配挑战赛,双赛道冠亚军方案
  2. ubutu14.04无法使用sudo,也无法切换到root用户去解决问题怎么办?
  3. 前端php解密,转发:RSA实现JS前端加密,PHP后端解密
  4. boost::hana::flatten用法的测试程序
  5. div设置宽度,实现不等比缩放,或设置最小宽度 min-width
  6. H5移动页面的touch事件与点击穿透问题
  7. exists sql用法_干货!SQL性能优化,书写高质量SQL语句
  8. 如何用Python画一只机器猫?| 原力计划
  9. 算法竞赛入门经典训练指南
  10. 质疑北京大北农科技集团股份有限公司(”大北农“)停牌公告
  11. 机床使用教学_2020清河正规ug加工培训16年研发教学行业-工之艺
  12. Angular服务器端渲染
  13. Qt实现简单的密码加密
  14. 倾角传感器原理及市场现状浅析
  15. sun java认证真题,sun scjp考试心得_java认证
  16. 网站html页面显示404错误,网站怎样设置404错误页面
  17. 02 文本检测(一)-CTPN
  18. 微信8.0下载(可抓包)
  19. Android kotlin let函数学习
  20. 原生 js html 开发成桌面应用 以及打包

热门文章

  1. Day5:python之函数(3)
  2. day02 while循环 运算符 格式化输出 编码
  3. Linux命令基础3
  4. 130242014045 林承晖 第2次实验
  5. 算法复习——计算几何基础(zoj1081)
  6. [BZOJ2326] [HNOI2011] 数学作业 (矩阵乘法)
  7. UVALive 5903 Piece it together(二分图匹配)
  8. 虚拟机环境下安装ESX不能安装虚拟系统解决方案
  9. C++ 的基础概念(3)——多态详解。
  10. 如何使用三态工作流 - [MOSS 2007应用日记]