关于Activity被回收

我们都知道,当一个Activity进入onStop状态时,如果系统内存不足,是有可能被系统回收的。那么当用户返回这个Activity,其实还是会显示的,只不过不是执行onRestart()方法,而是执行onCreat()方法重新创建活动。

但是这样的话会存在一点点小问题,假如,我们在A活动中有个EditText,里面输入了字符,然后进入了B活动,一段时间后A活动由于系统内存不足被回收了,我们再点击Back键回到A活动,会发现刚才输入的字符不见了,这用户不就抓狂了么?

其实,Activity中早有对于这种问题的解决办法,Activity中提供了一个onSaveInstanceState()回调方法,这个方法保证会在活动被回收之前调用,因此我们可以用这个方法解决活动被回收数据丢失的问题。

我们在A   Activity中加上如下代码:

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    String savedata = "this is need to save";
    int saveNumber = 100;
    outState.putString("str_key",savedata);
    outState.putInt("num_key",saveNumber);
}
   这时候数据已经保存下来了,当我们需要恢复的时候,在Activity的onCreate(Bundle savedInstanceState)方法中接收一个Bundle参数,如果系统在被回收之前调用了onSaveInstanceState方法的话,这个参数会带有之前保存的所有数据,我们只要将其取出并处理即可。如果没有保存数据的话,这个Bundle默认为null。
   取数据的代码也极其简单,代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if(savedInstanceState!=null){
        String saveData = savedInstanceState.getString("str_key");
        int saveNumber = savedInstanceState.getInt("num_key");
    }

}
这样,我们就把被系统回收的数据获取到了,是不是非常简单?
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值