关闭

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

标签: androidActivity生命周期横竖屏切换
152人阅读 评论(0) 收藏 举报
分类:

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6406次
    • 积分:367
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条