Android之Activity与Fragment的保存与恢复——以屏幕旋转为例

当屏幕旋转时,系统会销毁当前的activity并重新创建,这时就会丢失一些数据。我们以一个例子来展示activity的销毁创建过程。
下面是布局显示:
这里写图片描述
可以看出布局显示了时间,下面有一个输入框,这是我们自己输入的内容。我们在Activity里面重写了onDestory等方法,在日志文件中打印出Activity的销毁与创建的过程。接下来我们旋转屏幕。
这里写图片描述
可以看出时间发生了变化但是输入框里面的内容没有发生改变。
我们再看看打印出的日志:
这里写图片描述
可以清楚的看见Activity经历的状态从创建到销毁到再次创建。而新创建的Activity并没有保存原先的数据内容。

我们怎么解决屏幕配置变更呢,怎么可以保存原先的数据呢?
这里我列举出三种方法。

1.限定屏幕方向

即我们让屏幕方向保持不变,无论怎么旋转,屏幕都是一个方向,水平或者竖直。在AndroidManifest.xml文件中,添加如下代码:这里我们可以选择poritrait或landscape,水平或竖直

 android:screenOrientation="portrait"

即:
这里写图片描述
效果为:
这里写图片描述
这里写图片描述
可以看到旋转前后时间不变。

2.自己处理变更,即告诉系统不需要重启Activity

我们在AndroidManifest.xml文件中添加下列代码:

 android:configChanges="keyboardHidden|orientation|screenSize"

让屏幕自适应,注意要删掉先前的限定屏幕方向的代码,否则固定屏幕为水平。
效果为:
这里写图片描述
这里写图片描述
这样旋转屏幕即不会让数据不变也能适应屏幕大小。

3.系统处理变更

即我们用onSaveInstanceState 和onRestoreInstanceState方法,通过bundle传值。

猜你喜欢

转载自blog.csdn.net/ayangann915/article/details/80400597