关于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");
    }




阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhumingquanqq/article/details/49932547
个人分类: android学习分享
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭