我的应用是在应用启动时调用服务。
在应用程序中,我正在更新给定键值对的值
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共享首选项不适用于多个进程。任何替代方案?
答案 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)