美文网首页
onSaveInstanceState() 储存数据

onSaveInstanceState() 储存数据

作者: 逃离_102 | 来源:发表于2022-09-06 11:20 被阅读0次

说明

数据存在内存中,有的时候应用异常退出要恢复时会导致数据丢失等情况,这个时候就需要对数据储存做一些其他处理,如存在SaveInstanceState中,或者永久性储存中。这里介绍一下onSaveInstanceState() 储存数据数据的用法。

使用方法

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  //恢复容易被回收的数据
  if(savedInstanceState!=null){
    //todo 用savedInstanceState读取你所需的数据,记得判空
  }
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState)
  // 为了防止万一程序被销毁的风险,这个方法可以保证重要数据的正确性
  // 不写这个方法并不意味着一定出错,但是一旦遇到了一些非常奇怪的数据问题的时候
  // 可以看看是不是由于某些重要的数据没有保存,在程序被销毁时被重置
  //切换到其它apk时,当内存不足时,在之前设置的静态变量投保人会被回收掉。所以在此要保存
  //todo 用savedInstanceState储存数据
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  //todo 用savedInstanceState恢复所需数据,记得判空
}

注意事项

  • 用Bundle存储数据以便于跨进程传递,存储上限受限于Binder(1M),请勿用于存储大量数据(如Bitmap),也不要存需要冗长序列化和反序列化操作的复杂数据结构;
  • onSaveInstanceState()会将数据序列化到磁盘,如果序列化对象很复制,序列化时会占用大量内存,可能丢帧和视觉卡顿;

适用场景

适用于:配置更改后少量数据(如分辨率调整、权限变更、系统字体样式变更、系统语言切换、多窗口设定、系统导航方式变更等),Activity异常关闭,进程被终止后重新打开需要恢复的场景。

就说到这了,有什么不对的地方,欢迎指正,有什么没说全的,欢迎讨论留言

相关文章

网友评论

      本文标题:onSaveInstanceState() 储存数据

      本文链接:https://www.haomeiwen.com/subject/mheinrtx.html