Android--纠正Activity横竖屏切换的生命周期的错误

1、本机测试环境

android 4.3,

android:targetSdkVersion : 12,13,17

2、关于横竖屏切换的Activity生命周期的错误说法

初学Android,在学习Activity的生命周期时,自己在本机实验时,发现了一些不合理的情况。

那就是在横竖屏切换时,Activity并不会像网上大多数人所说的那样:

  • 不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次.
  • 设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次.
  • 设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法.

我自己写了个测试程序,见前面我写的Activity生命周期(一、二)。之后根据我的结果,又查了很多资料,终于知道了为什么出现不同结果。

得到下面结果:

  • 不设置android:configChanges时,切屏会重新调用各个生命周期(详细说明见Activity生命周期(一)),但不管是切横屏,还是竖屏,都是一次。
  • 设置android:configChages=”orientation”时,结果和不设置一样,仍然是重新调用,而且横竖屏都是一次。
  • 设置为android:configChanges=”orientation|keyboardHidden”时,结果如下:

    a. android:targetSdkVersion <= 12时,不会重新创建

    b. android:targetSdkVersion > 12时,和不设置一样,重新创建。

    c. 该点是网上获得的资料,没测试。在4.0以下的是不重建,而4.0以上的则为a,b所叙述。本测试机器为4.3。

  • 设置Activity的android:configChanges=”orientation|keyboardHidden|screenSize”时,不重新创建Activity。
  • 最后补充一点说明,重新创建是指,当前你启动了一个Actvity(onCreate–>onStart–>onResume),此时切换屏幕时,会销毁当前Activity,重新生成一个。

    (即onPause–>onStop–>onDestory–>onCreate–>onStart–>onResume)

3、总结

在现在android普遍都是>4.0的版本下,以前的结论基本上都是错误的。出现这种情况,是因为很多人都是盲目的复制别人的结论、文章,而重来不会自己验证下而导致的。

所以还是不要人云亦云,还是要自己多实践才行。

时间: 2024-11-03 21:19:36

Android--纠正Activity横竖屏切换的生命周期的错误的相关文章

无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)

1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCreate()开始,直到调用onDestory()为止.Activity在onCreate()中设置所有“全局”状态以完成初始化. 而在onDestory()中释放所有系统资源.例如,如果Activity有一个线程在后台运行从网络下载数据,它会在onCreate()创建线程, 而在onDestory()销

Android横竖屏切换的生命周期

现在的手机默认情况下可以横竖屏切换,但是横竖屏切换的生命周期是怎么样的,今天就来说明一下,以防你开发的app横竖屏时game over 1.在不做任何配置的情况下,加载一个activity的打印日志: 切换屏幕时方向的打印日志: ps:我这里没出现什么横屏切换竖屏时执行两次oncreate,个人觉得不对 2.配置android:configChanges="keyboardHidden|orientation|screenSize"时,屏幕切换时,不会出现重启activity 3.配置

Intent七大属性,Activity的启动方式,横竖屏切换的生命周期,现场保护--&gt;

---------------------------------Intent七大属性------------------------------------- 第一类:启动,有ComponentName(显式),Action(隐式),Category(隐式). 第二类:传值,有Data(隐式),Type(隐式),Extra(隐式.显式). 第三类:启动模式,有Flag. ---------------------------------------Activity的启动方式----------

Fragment和Activity生命周期以及横竖屏切换对生命周期的影响

Fragment生命周期图解,fragment和activity生命周期对比 生命周期变化 : 切换到该Fragment 05-21 14:26:35.095: D/FragmentDemo(7649): onAttach 05-21 14:26:35.095: D/FragmentDemo(7649): onCreate 05-21 14:26:35.095: D/FragmentDemo(7649): onCreateView 05-21 14:26:35.100: D/FragmentDe

android的Activity横竖屏切换时的生命周期

OnCreate()->OnStart->OnResume()->onPause()->onDestory->OnCreate()->OnStart->OnResume() 想要避免这种情况:要在manifest文件里面配置onconfigChanged属性 OnCreate:对象创建完毕,但此时不可见 OnStart: Activity在屏幕可见,但是此时没有焦点 OnResume:Activity在屏幕可见,并且获得焦点 onPause:Activity在屏幕

android开发之activity横竖屏切换时的生命周期以及横竖屏切换时的资源适配方案

背景:之前有过两篇写activity的博客 android之activity的生命周期详解:详细介绍了activity的整个生命周期.各状态间的转换和返回桌面时保存activity的状态 android之activity中onSaveInstanceState和onRestoreInstanceState的触发时机:介绍了activity中这两个方法的触发时机和作用 本篇博客会牵扯到里面的内容,如果你都有所了解可以直接往下看,如果不了解可以进去回忆下. 问题:在做应用的退出对话框时,发现如果对话

Activity横竖屏切换的问题

Activity在横竖屏切换的时候会重新走生命周期的方法,这样做的话会导致一些问题 比如我们在界面上录入的一些数据,但因为重新走了生命周期的方法onCreate()方法,这样就会导致前功尽弃,所以就想办法,在横竖屏切换的时候不能让其重新OnCreate(),Android中我们可以在清单文件中对应的Activity使用如下的属性  android:configChanges="keyboardHidden|orientation|screenSize"  这样就可以避免此类事情的发生.

Android应用:横竖屏切换总结

眨眼间,已经到了2016你年春节前,离上一篇博客的时间已经有6个月多,回想起这半年的种种,不得不说,学习和工作实在是太忙了,或许这就是程序员的真实写照吧. 写博客之初,主要的目的还是为了把自己的学习痕迹记录下来,写的东西比较基础,也不多,算是一种督促,希望能坚持地学习下去,因为学识不存在暴发户,靠的是积累.如果对自己过去半年的学习给个评价,我还是比较满意的,前期定下来的目标都基本都达到了.单凭这个,我就觉得今年的新年会是个好年. 说完过去,那么接着就是将来.因为现在的工作环境上外网不大方便,而且

Android视频播放和横竖屏切换

最近做了一个项目,里面用到了视频播放这一块,当时想考虑Vitamio,demo也做了出来,但是后来发现它是商业收费的,并且收费相当可观,所以只能放弃了.然后找到了ijkPlayer,功能也很强大,最终选择了Wei_Leng基于ijkPlayer开发的superPlayer,在这里也要感谢一下这位无私的博主,贴下他的链接superPlayer 但是因为我的布局稍微有点复杂,在切换横屏的时候,并不能完美实现,后来又参考了一位博主的文章,这里也贴一下:视频播放横竖屏切换 好了,废话不多说了,先上效果图