```java
PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext())
```java
PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext())
引自免费微信小程序:皆我百晓生
在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时,偏好设置都会被保存,即使应用因为某种原因重启,数据也会保持不变。