4

我正在从小部件启动的活动中为共享偏好存储一些价值。如果我从同一个小部件启动的服务中检索该值,则它不是更新的。我得到了共享偏好中的先前值。即使我在共享首选项 xml 中检查了该值,我也在那里看到了更新的值。为什么会这样。我知道widget和activity是两个进程,是这个原因吗?​

SharedPreferences preferences = getSharedPreferences("preferences_target_value", Context.MODE_PRIVATE);

String targetValue = preferences.getString("preferences_target_value", "0");

System.out.println("targetValue "+targetValue);`
4

3 回答 3

5

这些值按进程缓存。

如果您在 Android > 2.3 上运行,则必须指定MODE_MULTI_PROCESS何时调用getSharedPreferences (). 如果您在 Android < 2.3 上运行,那么它应该可以正常工作。如果您在 Android 2.3 上运行,则共享首选项中存在错误,并且无论您做什么,它都无法在多个进程中正常工作。

于 2012-08-27T07:53:01.257 回答
1

在更新值后使用commit(),调用它以在编辑器中执行任何更改

prefsEditor.commit();

更改您的代码而不是这个

SharedPreferences preferences = getSharedPreferences("preferences_target_value", Context.MODE_PRIVATE);

对此

SharedPreferences preferences = getSharedPreferences("preferance name", Context.MODE_PRIVATE);
于 2012-08-27T05:42:21.930 回答
1

在清单文件中尝试删除

android:process=":my_process"

从服务。希望它会奏效。

于 2018-12-09T17:16:17.437 回答