android – onSharedPreferenceChanged多次调用…为什么?

前端之家收集整理的这篇文章主要介绍了android – onSharedPreferenceChanged多次调用…为什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个偏好活动,首先当我有机会优先选择onPreferenceChange被触发一次如预期.

但是,在一段时间之后(转到不同的活动等等),onPreferenceChange被调用两次.

我在调试器中看到,对于mListeners的WeakHashMap在开始时为1,然后变为大于1,但不知道为什么?

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getPrefs();
    int preferencesResource = 0; // R.xml.preferences;
    preferencesResource = getResources().getIdentifier("pref","xml",getPackageName());
    addPreferencesFromResource(preferencesResource);
    listener = new SharedPreferences.OnSharedPreferenceChangeListener() {

        @Override
        public void onSharedPreferenceChanged(SharedPreferences arg0,String arg1) {
            // Why is this called once then sometimes twice!!
            Log.i("PreferencesActivity","OnPreferenceChanged()");
        }
    };
    prefs.registerOnSharedPreferenceChangeListener(listener);
}

protected void onDestroy() {
    super.onDestroy();
    listener = null;
    prefs.unregisterOnSharedPreferenceChangeListener(listener);
    prefs = null;
}

public Preferences getPrefs() {
    if (prefs == null) prefs = new Preferences(this);
    return prefs;
}

解决方法

您已将unregisterOnSharedPreferenceChangeListener()放在onDestroy()中,并且在所有活动重新启动时未调用它.

看看activity lifecycle diagram.结论是,正确的方法是分别在onResume()和onPause()中放置registerOnSharedPreferenceChangeListener()和unregisterOnSharedPreferenceChangeListener().

原文链接:https://www.f2er.com/android/310559.html

猜你在找的Android相关文章