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传值。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值