Activity被销毁后重新创建的数据存储和恢复

一、生命周期

一个Activity正常的生命周期应该是:

onCreate→onStart→onResume→onPause→onStop→onDestroy

以及还有一个onRestart方法会在Activity再次可见时调用:

onStop→onRestart→onStart

然而Activity可能会在系统配置发生改变以及内存不足的情况下被杀死,这时系统会调用onSaveInstanceState来保存当前Activity的状态。该方法的调用是在onStop之前,但它和onPause没有既定的时序关系,可能在onPause之前调用,也可能在onPause之后调用。当Activity被重新创建后,系统会调用onRestoreInstanceState,并且把Activity销毁时onSaveInstanceState方法所保存的Bundle对象作为参数同时传递给onRestoreInstanceState和onCreate方法。从时序上来说,onRestoreInstanceState的调用时机在onStart之后。

PS:onSaveInstanceState只会出现在Activity被异常终止的情况下,正常情况下系统不会回调该方法。

二、简单的存储与恢复

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_restore);
    if (savedInstanceState != null) {
        String data = savedInstanceState.getString("test");
        Log.d(TAG, "onCreate: "+data);
    }
}

@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
    super.onSaveInstanceState(outState, outPersistentState);
    Log.d(TAG, "onSaveInstanceState:");
    outState.putString("test","data");
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    String data = savedInstanceState.getString("test");
    Log.d(TAG, "onRestoreInstanceState: "+data);
}

上述代码很简单,我在onSaveInstanceState()方法中存储了一个字符串,然后当Activity被销毁并重新创建后,我们再去获取之前存储的字符串。接收的位置可以选择onRestoreInstanceState()或者onCreate(),二者的区别在于前者不需要判断传入的参数是否为空。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值