Android 6 及更高版本中的 SharedPreferences 未更新值

SharedPreferences not updating value in Android 6 and above

我将用户的个人资料图片 uri 存储在 SharedPreferences 中。当用户更新他们的个人资料图片时,它也应该在 SharedPreferences 中更新。但是,当我尝试检索新的图像 uri 时,我总是得到旧的 uri,但如果我关闭设备或强制停止应用程序,该值就会更新。我注意到这个问题发生在 android 6.0 和 8.0 上,尝试了 kitkat 并且它工作正常。我在网上找到了一些建议使用 apply() 而不是 commit() 的解决方案,但都没有用。

这是我用来保存图片 uri 的代码:

SharedPreferences login = PreferenceManager.getDefaultSharedPreferences(getContext());
SharedPreferences.Editor editor = login.edit();
editor.putString( USER_PROFILE_PIC,  selectedImage.toString());
editor.apply();

这是我检索图像 uri 的方式:

SharedPreferences login = PreferenceManager.getDefaultSharedPreferences(getContext());
SharedPreferences.Editor editor = login.edit();
String profileImageURI = login.getString( USER_PROFILE_PIC, "" );

更新

在我更新 SharedPreferences 的 activity 中正确返回值。但是,在 syncAdapter 中,当我从 SharePreferences 检索值时,它 returns 旧值。

终于想通了,根据this answer,在Android < 2.3中,一个进程可以进行更改,另一个进程可以读取更改。在Android > 2.3之后还可以,但是在使用SharePreferences的时候需要设置MODE_MULTI_PROCESS,所以代码变成了这样:

SharedPreferences prefs = context.getSharedPreferences(context.getPackageName() + "_preferences", Context.MODE_PRIVATE| Context.MODE_MULTI_PROCESS); // context.getPackageName() + "_preferences" is the name of the sharePreferences file

我第一个找到解决方案in this blog