共享首选项更新值未反映在服务中

时间:2016-12-30 12:24:08

标签: android service sharedpreferences

我的应用是在应用启动时调用服务。

在应用程序中,我正在更新给定键值对的值

SharedPreferences.Editor editor = getSharedPreferences(getString(R.string.shared_preferences_name), MODE_PRIVATE).edit();
    editor.putString("key",value);
    editor.apply();

我正在尝试从服务中获取它

SharedPreferences preferences = getSharedPreferences(getString(R.string.shared_preferences_name), MODE_PRIVATE);
String key = preferences.getString("key",null);

但服务始终显示旧密钥值。即,该值仅在应用程序启动或服务重新启动后反映。

如何在不重新启动服务或应用程序的情况下获取服务中的更新值?

如上所述here共享首选项不适用于多个进程。任何替代方案?

2 个答案:

答案 0 :(得分:0)

您需要OnSharedPeferencesChangeListener来监听偏好的更新。 它显示旧值的原因是因为它未更新(未调用代码行)。您需要触发事件来更新它。

SharedPreferences prefs = 
PreferenceManager.getDefaultSharedPreferences(this);

prefs.registerOnSharedPreferenceChangeListener(
new SharedPreferences.OnSharedPreferenceChangeListener() {
    public void onSharedPreferenceChanged(
        SharedPreferences prefs, String key) {

        String key = prefs.getString("key",null);
    }
});`

编辑:您需要SharedPreferences.OnSharedPreferenceChangeListener对象的强引用。示例here

答案 1 :(得分:0)

如上所述here

Note: This class does not support use across multiple processes.

所以它不会立即反映出变化。