SharedPreferences最后一次写入断电不保存问题记录

现象:

连续几次将数据写入SharedPreferences保存后断电。断电前可以看到/data/data/package_name/shared_prefs/*.xml 文件内容已修改为最后一次写入数据。上电后在执行读取数据操作前,/data/data/package_name/shared_prefs/*.xml的内容始终为最后一次写入内容,但执行读取操作时,xml中内容改变,变为最后一次写入之前的数据

原因:

使用sharedpreference保存文件后掉电会出现异常,是由于sharedpreference在保存记录的时候会生成一个bak文件,当保存完成后会删除这个文件,但是删除的时机不确定,这个时候掉电会导致文件没有删除,再次开机后使用sharedpreference时会将源文件删除,将bak文件替换成源文件,就会出现文件没有保存上的情况。
可参照原文链接:https://blog.csdn.net/m0_37732679/article/details/104047681

对策:在数据提交后,执行shelll命令sync会立刻更新,bak文件将会被删除

SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(KeyName, floatArrayToStr(array));
editor.apply();

try {
    /* 對應斷電數據保存丟失問題 */
    Runtime.getRuntime().exec("sync");
}
catch (IOException e)
{
    e.printStackTrace();
}

拓展:关于SharedPreferences的更多详细内容学习
原文链接:https://blog.csdn.net/fanxudonggreat/article/details/80877469

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
判断SharedPreferences一次运行的方法可以通过检查存储的键值对是否存在来实现。首先,在应用程序的入口处(例如在onCreate()方法中)创建一个SharedPreferences文件,并设置一个默认值为true的布尔型键值对项。然后,在程序的其他地方,可以通过读取SharedPreferences文件中的布尔型值来判断是否为第一次运行。如果读取到的值是true,则说明是第一次运行,可以执行相应的操作并将该值设为false,以便下次运行时判断为非第一次运行。这种方法可以确保只在第一次运行时执行特定的操作。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [SharedPreferences一次判断](https://download.csdn.net/download/qq_30953277/9453057)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [SharedPreferences判断程序是否第一次安装](https://download.csdn.net/download/zhaihaohao1/8261263)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值