Я прочитал этот полезный пост:
SharedPreferences.onSharedPreferenceChangeListener не вызывается постоянно
Однако мне не повезло. Я пытаюсь создать OnSharedPreferenceChangeListener, который работает в службе. Все реализовано правильно, но не всегда срабатывает слушатель.
public MyServiceOne extends Service {
public SharedPreferences mSharedPreferences;
// Listener defined by anonymous inner class.
public OnSharedPreferenceChangeListener mListener = new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Log.d("debug", "A preference has been changed");
}
};
@Override
public void onCreate() {
mSharedPreferences = getSharedPreferences(MySharedPreferences.NAME, Context.MODE_PRIVATE);
mSharedPreferences.registerOnSharedPreferenceChangeListener(mListener);
}
@Override
public void onDestroy() {
super.onDestroy();
mSharedPreferences.unregisterOnSharedPreferenceChangeListener(mListener);
}
}
ОБНОВЛЕНИЕ
Проблема связана с фактом, о котором я не упоминал. Я использую две службы, и при изменении общих предпочтений в MyService2 ничего не запускается. В манифесте я определяю службы, которые будут запускаться в разных процессах. Есть ли способ заставить это работать?