1. AndroidMenifest没有设置configChanged属性。

竖屏启动(横屏启动相同):

onCreate -->onStart-->onResume

切换横屏:

onPause ——> onSaveInstanceState -->onStop -->onDestroy -->onCreate-->onStart -->

onRestoreInstanceState-->onResume -->onPause -->onStop -->onDestroy

(Android 6.0 Android 7.0 Android 8.0)

总结:没有设置configChanges属性Android 6.0 7.0 8.0 系统手机 表现都是一样的,当前的界面调用onSaveInstanceState走一遍流程,

然后重启调用onRestoreInstanceState再走一遍完整流程,最终destory。

2.AndroidManifest设置了configChanges   android:configChanges="orientation"

竖屏启动:

onCreate -->onStart-->onResume

切换横屏:

onPause -->onSaveInstanceState -->onStop -->onDestroy -->onCreate-->onStart -->

onRestoreInstanceState-->onResume -->onPause -->onStop -->onDestroy

(Android 6.0)

onConfigurationChanged-->onPause -->onSaveInstanceState -->onStop -->onDestroy -->
onCreate-->onStart -->onRestoreInstanceState-->onResume -->onPause -->onStop -->onDestroy

(Android 7.0)

onConfigurationChanged

(Android 8.0)

横屏启动:

onCreate -->onStart-->onResume

切换竖屏:

onPause -->onSaveInstanceState -->onStop -->onDestroy -->onCreate-->onStart -->

onRestoreInstanceState--> onResume -->onPause -->onStop -->onDestroy

(Android 6.0 )

onConfigurationChanged-->onPause -->onSaveInstanceState -->onStop -->onDestroy -->
onCreate-->onStart -->onRestoreInstanceState-->onResume -->onPause -->onStop -->onDestroy

(Android 7.0)

onConfigurationChanged

(Android 8.0)

总结:设置了configChanges属性为orientation之后,Android6.0 同没有设置configChanges情况相同,完整的走完了两个生命周期,调用了onSaveInstanceState和onRestoreInstanceState方法;Android 7.0则会先回调onConfigurationChanged方法,剩下的流程跟Android 6.0 保持一致;Android 8.0 系统更是简单,
只是回调了onConfigurationChanged方法,并没有走Activity的生命周期方法。
 
3.AndroidManifest设置了configChanges   
android:configChanges="orientation|keyboardHidden|screenSize" 
竖(横)屏启动:onCreate -->onStart-->onResume
切换横(竖)屏:onConfigurationChanged   (Android 6.0 Android 7.0 Android 8.0)

总结:设置android:configChanges="orientation|keyboardHidden|screenSize"  则都不会调用Activity的其他生命周期方法,只会调用onConfigurationChanged方法。

4.AndroidManifest设置了configChanges   
android:configChanges="orientation|screenSize" 
竖(横)屏启动:onCreate -->onStart-->onResume
切换横(竖)屏:onConfigurationChanged   (Android 6.0 Android 7.0 Android 8.0)

总结:没有了keyboardHidden跟3是相同的,orientation代表横竖屏切换 screenSize代表屏幕大小发生了改变,
设置了这两项就不会回调Activity的生命周期的方法,只会回调onConfigurationChanged 。

5.AndroidManifest设置了configChanges   
android:configChanges="orientation|keyboardHidden"

总结:跟只设置了orientation属性相同,Android6.0 Android7.0会回调生命周期的方法,Android8.0则只回调onConfigurationChanged。说明如果设置了orientation 和 screenSize 都不会走生命周期的方法,keyboardHidden不影响。

1.不设置configChanges属性不会回调onConfigurationChanged,且切屏的时候会回调生命周期方法。
2.只有设置了orientation 和 screenSize 才会保证都不会走生命周期,且切屏只回调onConfigurationChanged。
3.设置orientation,没有设置screenSize,切屏会回调onConfigurationChanged,但是还会走生命周期方法。

注:这里只选择了Android部分系统的手机做测试,由于不同系统的手机品牌也不相同,可能略微会有区别。
      
另:
代码动态设置横竖屏状态(onConfigurationChanged当屏幕发生变化的时候回调)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

获取屏幕状态(int ORIENTATION_PORTRAIT = 1;  竖屏    int ORIENTATION_LANDSCAPE = 2; 横屏)
int screenNum = getResources().getConfiguration().orientation;

configChanges属性
1. orientation 屏幕在纵向和横向间旋转 
2.keyboardHidden 键盘显示或隐藏 
3.screenSize 屏幕大小改变了 
4.fontScale 用户变更了首选的字体大小 
5.locale 用户选择了不同的语言设定 
6.keyboard 键盘类型变更,例如手机从12键盘切换到全键盘 
7.touchscreen或navigation 键盘或导航方式变化,一般不会发生这样的事件
常用的包括:orientation keyboardHidden screenSize,设置这三项界面不会走Activity的生命周期,只会回调onConfigurationChanged方法。

screenOrientation属性
1.unspecified 默认值,由系统判断状态自动切换 
2.landscape 横屏 
3. portrait 竖屏 
4.user 用户当前设置的orientation值 
5. behind 下一个要显示的Activity的orientation值 
6. sensor 使用传感器 传感器的方向 
7. nosensor 不使用传感器 基本等同于unspecified
仅landscape和portrait常用,代表界面默认是横屏或者竖屏,还可以再代码中更改。

---------------------

作者:木头小颖
来源:CSDN
原文:https://blog.csdn.net/qq_36713816/article/details/80538467
版权声明:本文为博主原创文章,转载请附上博文链接!

Android横竖屏切换生命周期变化的更多相关文章

  1. Android横竖屏切换生命周期

    转自xiaoQLuhttp://www.cnblogs.com/xiaoQLu/p/3324503.html 开源帮助android获得了飞速的发展,开源也导致了数不清的碎片问题.android的前期 ...

  2. Android 横竖屏切换生命周期

    默认情况下,屏幕会旋转并且会重新走生命周期. 1. 屏幕不旋转   在AndroidManifest文件中的对应Activity中配置android:screenOrientation=”landsc ...

  3. Android横竖屏切换及其对应布局加载问题

    第一,横竖屏切换连带横竖屏布局问题: 如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同的布局. 可以通过以下两种方法来切换布局: 1)在res目录下建立layout-land ...

  4. Android横竖屏切换小结

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

  5. 【转】Android横竖屏切换问题

    Android横竖屏切换总结(Android资料) Android横竖屏要解决的问题应该就两个: 一.布局问题 二.重新载入问题 1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的 ...

  6. Android横竖屏切换及其相应布局载入问题

    第一.横竖屏切换连带载入多屏布局问题: 假设要让软件在横竖屏之间切换.因为横竖屏的高宽会发生转换,有可能会要求不同的布局. 能够通过下面两种方法来切换布局: 1)在res文件夹下建立layout-la ...

  7. Android横竖屏切换总结

    Android横竖屏切换总结(Android资料) Android横竖屏要解决的问题应该就两个: 一.布局问题 二.重新载入问题 1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的 ...

  8. 我的Android进阶之旅------>Android横竖屏切换总结

    在默认情况下当屏幕从竖评变到横屏时会触发 onConfigurationChanged 事件 在默认情况下会重新加载画面并显示和横屏一样的画面,这样会有2个问题,   * 布局问题,在竖屏 显示的布局 ...

  9. Android横竖屏切换解决方案

    Android横竖屏切换解决方案 首先在Mainifest.xml的Activity元素中加入android:configChanges="orientation|keyboardHidde ...

随机推荐

  1. 适用于nodercms的打包构建脚本

    背景 最近自己用nodercms搭建了一个简单的博客系统,用户发布一些自己谁便谢谢的文章.感谢nodercms团队,这个cms轻量易用,用于做个人博客太方便了.开发了博客系统,肯定设计到部署到AWS或 ...

  2. java工具类——java将一串数据按照gzip方式压缩和解压缩

    我要整理在工作中用到的工具类分享出来,也方便自己以后查阅使用,这些工具类都是我自己实际工作中使用的 import java.io.ByteArrayInputStream; import java.i ...

  3. 容器化部署Cassandra高可用集群

    前提: 三台装有docker的虚拟机,这里用VM1,VM2,VM3表达(当然生产环境要用三个独立物理机,否则无高可用可言),装docker可参见Ubuntu离线安装docker. 开始部署: 部署图 ...

  4. 十进制 -> 十六进制

    x /16 依次取余 ,最先余作十六进制的最低 字节有效位,最后的余数  作最高的字节有效位,其中我们需要注意理解 的是  一个 数据的 最高字节及  内存的 高地址及低地址 更进一步的就算机器存储的 ...

  5. MySQL使用LOAD DATA LOCAL INFILE报错

    在windows系统的MySQL8.0中尝试执行以下语句时报错 mysql> LOAD DATA LOCAL INFILE '/path/filename' INTO TABLE tablena ...

  6. loadrunner-关联

    1.什么是关联? 将服务器动态返回的值,保存成一个参数,供后面需要使用到 此参数的地方使用 PS:1.一定是服务器返回的 2.动态变化的,静态不需要关联 3.服务器需要校验的 4.保存成一个参数 5. ...

  7. 13Linux_vsftpd_Samba_NFS实现文件共享_TFTP

    vsftpd服务程序: 匿名开放模式 本地用户模式 虚拟用户模式 简单文件传输协议 TFTP:UDP协议,端口69 TFTP服务使用xinetd服务程序来管理. Samba文件共享服务 NFS网络文件 ...

  8. 服务器还原阿里云Mysql数据库

    https://www.percona.com/doc/percona-xtrabackup/2.3/installation/yum_repo.html

  9. 45_redux_comment应用_redux版本_异步功能

    /* * 包含所有action的type名称常量 * */ //添加评论 export const ADD_COMMENT = 'add_comment'; //删除评论 export const D ...

  10. webservice 教程

    https://ke.qq.com/webcourse/index.html#cid=28875&term_id=100182700&taid=800324205965515& ...