使用onSavedInstanceState( )方法在活动被回收前保存数据

假设存在活动A和活动B;我们在活动A的基础上,启动了活动B,这时候,活动A就进入了停止状态;但是由于系统内存不足,将活动A回收掉了。如果我们在活动B中按下Back键返回A活动,会怎么样?
如果活动A没有被回收的话,会执行onRestart( )方法,但是被回收了之后,会执行onCreate( )方法;也就是说,活动A会被重新创建一遍,还是可以正常显示。
这样看上去好像没有什么问题
但是当活动A中还有数据没有保存,比如输入框中还有文字在编辑,那么也会全部丢失,这显然是十分烦人的。
解决方法:onSaveInstanceState( )方法
这个方法会保证在活动被回收之前被调用
onSaveInstanceState( )方法的参数
  1. Bundle类型的参数
Bundle类型提供了一系列方法来保存数据,例如:
  1. putString( ):保存字符串
  2. putInt( ):保存整型数据
这些保存方法都需要传入两个参数:
  1. 键值,用于之后查找取回数据
  2. 真正要保存的数据
以String类型为例:
@Override
protected void onSaveInstanceState (Bundle outState) {
    super.onSaveInstanceState (outState) ;
    String data_save = "Something you just typed" ;
    outState.putString ("data_key" , data_save) ;
}
可以看出,数据已经被保存了下来;如果是输入框中的也是一样,将输入文本保存在里面。那么在哪里可以恢复呢?
我们注意到,onCreate( )方法中带有Bundle参数,一般情况下都是null;但是当有临时数据保存的时候,这个参数就会带有全部数据;所以,我们只需要在这里利用这个 Bundle参数就可以恢复了
@Override
protected void onCreate (Bundle savedInstanceState) {
    ……
    if (savedInstaceState != null) {
        String data_save = savedInstanceState.getString ("data_key") ;
        Log.d ("A" , data_save) ;
    }
}
可见,我们判断如果savedInstanceState不是null,说明带有了数据,然后调用它的getString( )方法,传入键值,就可以取出数据了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值