收听 SharedPreferences 更改

SharedPreferences sharedPreferences = ...;
sharedPreferences.registerOnSharedPreferenceChangeListener(mOnSharedPreferenceChangeListener);

private final SharedPreferences.OnSharedPreferenceChangeListener mOnSharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        //TODO
    }
}

请注意:

  • 只有在添加或更改值时才会触发侦听器,设置相同的值不会调用它;
  • 监听器需要保存在成员变量中,而不是匿名类,因为 registerOnSharedPreferenceChangeListener 使用弱引用存储它,因此它将被垃圾收集;
  • 它也可以直接由类实现,然后调用 registerOnSharedPreferenceChangeListener(this);,而不是使用成员变量
  • 当使用 unregisterOnSharedPreferenceChangeListener 不再需要时,请记得取消注册该侦听器。