z109876543210 2024-05-07 19:04 采纳率: 20%
浏览 7

getDefaultSharedPreferences这个重启apk数据就丢了。怎么办? commit 是返回true的! AI不要回复



```java
PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext())


  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-07 19:04
    关注

    引自免费微信小程序:皆我百晓生

    在Android开发中,如果你发现getDefaultSharedPreferences存储的数据在应用重启后丢失,这可能是因为这些偏好设置没有正确地保存到磁盘。尽管你在调用commit()方法后得到了true,但这并不意味着数据一定被持久化了。为了确保数据能够在应用重启后仍然存在,你需要在某个合适的地方(例如,在应用生命周期中的适当回调函数中)调用apply()方法。

    apply() 方法会立即写入偏好设置并异步保存到磁盘,这样即使在应用退出之前也能保证数据被保存下来。以下是修改后的代码示例:

    // 获取默认的共享首选项
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
    SharedPreferences.Editor editor = preferences.edit();
    
    // 设置一个值
    editor.putString("your_key", "your_value");
    
    // 立即应用更改,异步保存到磁盘
    editor.apply();
    

    这里的关键在于使用 apply() 而不是 commit()。这是因为 commit() 在某些情况下可能会延迟保存,特别是在设备资源紧张时。而 apply() 会立即执行,并且在一个单独的线程中异步保存数据,这样可以提高应用性能,并确保数据在应用退出前被保存。

    如果你想要在特定的生命周期事件后保存数据,比如在用户离开活动时,可以在合适的生命周期回调方法中添加保存逻辑,例如 onPause() 或者 onStop()

    @Override
    protected void onPause() {
        super.onPause();
        
        // 在此处保存偏好设置
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = preferences.edit();
    
        // 设置一个值
        editor.putString("your_key", "your_value");
    
        // 立即应用更改,异步保存到磁盘
        editor.apply();
    }
    

    这样,每次用户离开你的Activity时,偏好设置都会被保存,即使应用因为某种原因重启,数据也会保持不变。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月7日

悬赏问题

  • ¥30 不会,学习,有偿解答
  • ¥15 SQL查询语句报错(检查)
  • ¥15 此表中公式应该怎么写
  • ¥15 求HI-TECH PICC 9.50 PL3安装包
  • ¥15 下载ctorch报错,求解
  • ¥15 如何入门学习c语言,单片机
  • ¥15 idea 编辑语言的选择
  • ¥15 Windows下部署Asmjit
  • ¥15 请问双层规划模型的上下层目标函数不一致,是如何保证迭代收敛性的
  • ¥30 微信小程序 前端页面内容搜索