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

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

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

在targetSdkVersion的值大于12时

Activity启动

I/System.out: onCreate

I/System.out: onStart

I/System.out: onResume

竖屏切换为横屏

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

横屏切回竖屏

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

配置android:configChanges="orientation|screenSize"后,竖屏切换为横屏

I/System.out: onConfigurationChanged

配置android:configChanges="orientation|screenSize"后,横屏切回竖屏

I/System.out: onConfigurationChanged

在targetSdkVersion的值小于或等于12时

Activity启动

I/System.out: onCreate

I/System.out: onStart

I/System.out: onResume

竖屏切换为横屏

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

横屏切回竖屏

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

配置android:configChanges="orientation"后,竖屏切换为横屏

I/System.out: onConfigurationChanged

配置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横竖屏切换方法,Android横竖屏切换的生命周期相关推荐

  1. android颜色值的表示方法android:background=#FFFFFFFF的意思

    android颜色值的表示方法 android:background="#FFFFFFFF"的意思 Android中的颜色值是通过红(Red).绿(Green).蓝(Blue)三原 ...

  2. Android零基础入门第86节:探究Fragment生命周期

    2019独角兽企业重金招聘Python工程师标准>>> 一个Activity可以同时组合多个Fragment,一个Fragment也可被多个Activity 复用.Fragment可 ...

  3. Android开发笔记(三十九)Activity的生命周期

    与生命周期有关的方法 下面是Activity类与生命周期有关的方法: onCreate : 创建页面 onStart : 开始页面 onStop : 停止页面 onResume : 恢复页面 onPa ...

  4. Python学习手册之内部方法、操作符重载和对象生命周期

    在上一篇文章中,我们介绍了 Python 的类和继承,现在我们介绍 Python 的内部方法.操作符重载和对象生命周期. 查看上一篇文章请点击:https://www.cnblogs.com/dust ...

  5. android横竖屏切换方法,Android 4.0 横竖屏切换注意事项

    ==Android 2.3以前的横竖屏切换== 在Android 2.3平台上,我们可以需要设置界面的横竖屏显示时,可以在AndroidManifest.xml中,对Activity的属性添加以下代码 ...

  6. android monitor的使用方法,Android Device Monitor使用方法及常见问题解决方案

    Android Device Monitor使用方法及常见问题解决方案 发布时间:2018-07-17 18:18, 浏览次数:1184 , 标签: Android Device Monitor DD ...

  7. android中的add方法,Android中Fragment怎么addView?

    慕勒3428872 Fragment是Android honeycomb 3.0新增的概念,在Android--Fragment介绍.AndroidFragment使用.Android Fragmen ...

  8. android的反调试方法,Android平台融合多特征的APP反调试方法与流程

    本发明涉及Android平台融合多特征的APP反调试方法,属于计算机与信息科学技术领域. 背景技术: 应用程序本身并不具备反调试的功能,但是动态调试是动态分析应用逻辑.动态脱壳等攻击方式所采取的必要手 ...

  9. android 开启子线程方法,android中开启子线程

    AndroidRuntime(673): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/ ...

最新文章

  1. 个人在公司在意的三点
  2. 如何准确估算并发数?
  3. 颜宁问4对科研夫妻:男女搭配,如何不累?
  4. MySql基本的操作
  5. 抗住 60 亿次攻击,起底阿里云安全的演进之路 | 问底中国 IT 技术演进
  6. lammps建模_LAMMPS常用建模方法总结
  7. 天线接收功率计算公式_无线信号功率计算公式
  8. 7-7 选民投票 (20分)(不区分大小写投票)
  9. 人工智能围棋战胜李世石,人工智能围棋阿尔法狗
  10. 假设一张纸的厚度是1mm,那么这张纸折叠多少次可以到达珠穆朗玛峰的高度(8848m)?
  11. Flutter 吐司弹框的使用 showToast弹框(插件)
  12. Android中的热修复
  13. (每日一练python)组合总和
  14. JAVA毕业设计科研成果管理系统设计与实现计算机源码+lw文档+系统+调试部署+数据库
  15. 我为什么而活着 [英]罗素
  16. python 爬虫 requests模块 中的Cookies 验证 通过验证cookies模拟登陆豆瓣登陆
  17. 面向对象类与对象的关系
  18. Apache Arrow 简介
  19. 用echart玩点好玩的--酷炫热力图
  20. 微信小程序 input事件绑定

热门文章

  1. Android 第三方ROM CyanogenMod 源码下载,编译,刷机
  2. 硫酸软骨素-聚乙二醇-卵清蛋白,Chondroitin sulfate-PEG-OVA/Ovalbumin
  3. Windows下解压分卷压缩方法
  4. 工业相机的传感器靶面大小
  5. 爬取智联招聘上24座热门城市中Java招聘信息
  6. apa引用要在文中吗_Reference 居然还有那么多讲究?引用不好就挂了!
  7. Java面试java基础,重庆java哪家培训班好
  8. 中关村科技企业家协会网安创新分会在京成立,墨云科技成为首批会员单位
  9. 人工智能的核心技术是什么
  10. 微信开放平台 错误码61007: api is unauthorized to component