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