关于Activity的横竖屏切换引起的生命周期变化的问题

原创 2015年11月19日 19:27:03

问题由来:一般我们拿着手机都是竖屏操作或观看,但有时会躺着,横屏去操作,这时,横竖屏的切换就对Activity的生命周期产生了影响。

一:我们进行横竖屏切换后,查看log日志

启动Activity初始界面为竖屏显示

竖屏:

查看log


正常的启动过程:依次执行  创建 --->onCreate()    可见状态---> onStart()  onResume()

下面 按住Ctrl+F11   切换到横屏


查看log


可以看出,切换到横屏后,执行了  不可见--->onPause(),onStop()        销毁--->onDestroy() 此时竖屏的Activity销毁结束

然后又重新创建了一遍Activity      依次执行了   创建---->onCreate()         可见----->onStart(),onResume()

二 :产生问题

 那么这儿就会出现一个问题,竖屏切换到横屏会把竖屏的Activity给销毁了,此时竖屏Activity的数据销毁了,而横屏的Activity又是重新创建的,这样数据丢失肯定是不行的。

三  解决问题

那怎么处理这个问题呢?

答:用onSaveInstanceState()回调方法

例如这样:把你想要传递的数据通过这个方法保存起来,这个方法在竖屏Activity暂停后执行。

protected void onSaveInstanceState(Bundle outState) {
    	// TODO Auto-generated method stub
    	super.onSaveInstanceState(outState);
    	outState.putString("name", "zhuminquan");
    	Log.e("TAG", "MainActivity onSaveInstanceState() method is executed");
    }
当竖屏切换到横屏时,查看log

前面我们已经把数据保存到了一个Bundle对象中,那怎么得到这个数据呢,你可以这样做

在onCreate(Bundle savedInstanceState)方法添加一句判断语句,若判断savedInstanceState不为空,那么就把这个数据拿出来。

例如这样

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textview = (TextView)this.findViewById(R.id.textview);
        if(savedInstanceState!=null){
        	String str = savedInstanceState.getString("name");
        }
        Log.e("TAG", "MainActivity onCreate() method is executed");
    }




版权声明:本文为博主原创文章,未经博主允许不得转载。

android-----横竖屏切换对Activity生命周期的影响

前面我们分析过Activity的生命周期(见:android-----Activity生命周期),但是在现实应用中我们可能会对手 机进行横竖屏切换,那么这样的切换对Activity的生命周期有什么影响...
  • hzw19920329
  • hzw19920329
  • 2016年05月08日 19:31
  • 2234

如何让手机横竖屏切换不重走Activity生命周期

在Manifest里加上android:configChanges="keyboardHidden|orientation|screenSize";   扩展补充: 一: Activity中还...
  • Chen_Tw
  • Chen_Tw
  • 2015年07月03日 15:44
  • 1330

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

背景:之前有过两篇写activity的博客android之activity的生命周期详解:详细介绍了activity的整个生命周期、各状态间的转换和返回桌面时保存activity的状态android之...
  • jason0539
  • jason0539
  • 2015年01月12日 21:20
  • 3572

设置横竖屏不走生命周期后,监听横竖屏的方法

我们知道AndroidManifest.xml文件中: activity 加android:configChanges=”orientation|keyboardHidden|screenSize”...
  • pengyu1801
  • pengyu1801
  • 2017年04月06日 14:06
  • 410

Android屏幕横竖屏切换和生命周期管理的详细总结

Android屏幕横竖屏切换和生命周期管理的详细总结       一般的我们去切换屏幕方向都是不希望Activity被重新创建,这时就需要对一些属性进行设置,或者使用代码设置。        今天想...
  • wenzhi20102321
  • wenzhi20102321
  • 2017年04月01日 09:46
  • 3007

Activity、Fragment生命周期---横竖屏切换的生命周期

先贴出一张大家众所周知activity流程图 onCreate():创建Activity调用,用于Activity的初始化,还有个Bundle类型的参数,可以访问以前存储的状态。onStart()...
  • u013210620
  • u013210620
  • 2015年11月27日 14:18
  • 1472

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

Fragment生命周期图解,fragment和activity生命周期对比 1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,...
  • robertcpp
  • robertcpp
  • 2016年06月11日 10:04
  • 3333

1Activity+多个Fragment模式下进行横竖屏切换的问题及解决方式

1Activity+多Fragment的模式。相信大多数Android app开发人员都不会感到陌生。很常见的界面,比如一些平板的设置界面。就是左边一排按钮,右边区域专门用来放左边按钮点击之后需要展示...
  • DucklikeJAVA
  • DucklikeJAVA
  • 2015年09月23日 16:01
  • 2213

Activity横竖屏切换的那些事

讲解之前需要说明的是 旋转屏幕:在系统的自动旋转屏幕开启的情况下,我们旋转屏幕 手动设置屏幕:我们自己去调用Activity的 setRequestedOrientation 方法。 设置屏幕的方向简...
  • gdutxiaoxu
  • gdutxiaoxu
  • 2017年03月15日 19:40
  • 1485

关于横竖屏切换后Fragment发生重叠问题的解决

在一个小项目中用到了ViewPager,所以在网上学习相关文章。 看到了VeiwPager结合Fragment的使用,所以重新学习了Fragment的相关知识。 在读了郭大神的博客之后顺手...
  • AndOneee
  • AndOneee
  • 2016年09月08日 09:02
  • 1288
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于Activity的横竖屏切换引起的生命周期变化的问题
举报原因:
原因补充:

(最多只允许输入30个字)