SharedPreferences最后一次写入时断电偶尔存在不保存问题

站长公众号

前言

最近测试反馈,播放音乐的信息断电时偶尔不记忆。

项目中的记忆是使用sharedpreferences的,sharedpreferences是以xml文件保存,保存的位置在:

/data/data/[包名]/shared_prefs

测试反馈的关键字[断电]、[偶尔]和[不记忆],也就是说这问题是概率性的出现。

参考网友说的,修改后就没有出现问题了。

记录于此,方便自己查一下。

正文

引用《sharedpreferences同步问题》中[sharedpreference掉电异常]内容

使用sharedpreference保存文件后掉电会出现异常,是由于sharedpreference在保存记录的时候会生成一个bak文件,当保存完成后会删除这个文件,但是删除的时机不确定,这个时候掉电会导致文件没有删除,再次开机后使用sharedpreference时会将源文件删除,将bak文件替换成源文件,就会出现文件没有保存上的情况

上面原文作者说会存在bak文件,这个我查看目录是没看到这个bak文件。

我们知道,操作写入文件内容时,不会时时刻刻的flush到文件中,这样效率就低了,因此都是先保存到缓存,最后保存。

还有数据库也是这样

external.db
external.db-shm
external.db-wal

当.db-shw和.db-wal缓存到一定的大小后,就会写入到.db里面去。

因此,为了解决[sharedpreference掉电异常]问题,我们可以保存SharedPreferences数据后,主动sync一下。

    try {
        Runtime.getRuntime().exec("sync");
    } catch (Exception e) {
        e.printStackTrace();
    }

参考文章

  1. sharedpreferences同步问题
  2. SharedPreferences最后一次写入断电不保存问题记录
  3. [随手记系列]SQLite数据库.db | .db-wal | .db-shw到底是个啥,为什么我导出.db里面没数据呢?

站长公众号
版权声明:125la.com站长 发表于 2021年7月12日 下午7:45 。
转载请注明: SharedPreferences最后一次写入时断电偶尔存在不保存问题 | 125啦读书导航

相关文章

站长公众号

暂无评论

暂无评论...