OnSharedPreferenceChangeListener无法在所有设备上运行?

时间:2015-10-06 21:52:01

标签: android sharedpreferences listener preferences

在我的onCreate void中,我使用它来检查首选项是否已更改:

    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            Log.d(TAG, "PREFERENCES CHANGED : " + key);
        }
    };
    preferences.registerOnSharedPreferenceChangeListener(listener);

它在我的Nexus 6(5.1.1)上完美运行,但在我的Samsung平板电脑标签S2(5.0.2)上没有(从不显示日志信息)。

是否归功于Android版本?

1 个答案:

答案 0 :(得分:1)

Is it due to the Android version ?

Documentation states that no. It has been present since API 1

  

public abstract void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key)   在API级别1中添加

     

更改,添加或删除共享首选项时调用。即使将首选项设置为其现有值,也可以调用此方法。

     

此回调将在您的主线程上运行。   参数   sharedPreferences收到更改的SharedPreferences。   key已更改,添加或删除的首选项的键。

但是,请注意:

  

注意:

     
    

首选项管理器当前不存储对侦听器的强引用。您必须存储对侦听器的强引用,否则它将容易被垃圾回收。我们建议您在对象的实例数据中保留对侦听器的引用,只要您需要侦听器即可。