z109876543210 2024-05-07 19:04 采纳率: 25%
浏览 13
已结题

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时,偏好设置都会被保存,即使应用因为某种原因重启,数据也会保持不变。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月17日
  • 创建了问题 5月7日