Activity如果中途被回收了,再次启动是如何恢复原始数据的?

场景如下:
比如现在有一个MainActivity,里面有一个输入框,我们正在输入文字,输到一半,假如此时有一个电话打进来,该MainActivity进入onStop()状态,如果手机系统内存不足,则MainActivity会被系统进行回收,挂掉电话,再次回到MainActivity中 ,但是MainActivity会被重新创建,刚输入的文字全部都没有了,那么,如何恢复数据呢?
也就是说:当一个活动进入停止状态的时候,是有可能被系统回收的。那如果处于停止状态的活动被系统回收了,而它上面却有我们所需要数据该如何保存呢?(类似于:打开qq进入下一个界面没有进去,返回的时候仍然不需要你输入账户名和密码)

Activity类中提供了onSaveInstanceState()回调方法,这个方法可以保证活动在被回收之前一定会被调用,因此我们可以通过这个方法来解决活动被回收时临时数据得不到保存的问题。
onSaveInstanceState()方法会携带一个Bundle类型的参数,Bundle提供了一系列的方法用于保存数据,比如可以使用putString()方法保存字符数据,由此类推。每个保存方法需要传入2个参数,第一个参数是键,用于从后面的Bundle中取值,第二个参数则是真正要保存的内容。

以下面项目为例:
在MainActivity中添加如下代码就可以就可以将临时数据进行保存.

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    String tempData = "save data";
    outState.putString("data_key", tempData);
}

数据是已经保存下来的,那么我们该如何恢复呢?修改MainActivity中的onCreate()方法

@Override
protected void omCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    if(savedInstanceState !=null){
        String tempData=savedInstanceState.getString("data_key");
        Log.d(TAG,tempData);
    }
}

取出值之后再做相应的操作恢复就可以了,比如说将文本内容重新赋值到文本输入框中。

链接: 参考网页内容.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值