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

问题由来:一般我们拿着手机都是竖屏操作或观看,但有时会躺着,横屏去操作,这时,横竖屏的切换就对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");
    }




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值