首先,我们应该先观察一下activity的生命周期,它在你进行屏幕旋转的时候,对于activity的生命周期是如何进行变化的。
对于主activity类,可以生成系统查看周期的方法,并进行重写
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart() called");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume() called");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause() called");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop() called");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy() called");
}
这是后让我们启动一下activity,在Logcat查看日志
显然,activity的生命周期开始启动
这是我们开始对屏幕进行旋转
虚拟机是这两个按键,对于实体机就不用说了吧。
然后点击一下按键,进行日志的查找
我们可以清晰的看到,activity生命周期结束,同时又开始了下一个生命周期,也就是开始了另外一个activity的生命周期,那么问题就来了,如果我们在当前activity中有信息,那么旋转一下,信息就会清除,这显然不是我们想要的。
这时候我们就应该进行数据的保存来应对屏幕旋转activity生命周期结束的问题
解决方法:
protected void onSaveInstanceState(Bundle outState)
对该方法进行重写
protected void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
Log.i(TAG, "onSaveInstanceState");
}
该方法在onStop()方法以后调用
此方法默认实现要求所有activity视图将自身状态数据保存在Bundle对象中。Bundle是存储字符串键与限定类型值之间映射关系的一种结构。