onSharedPreferenceChanged多次调用....为什么?

And*_*aya 13 android

我有一个偏好活动,首先当我有机会偏好时,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;
}
Run Code Online (Sandbox Code Playgroud)

And*_*Duś 15

您放置unregisterOnSharedPreferenceChangeListener()onDestroy()它不叫上的所有活动将重新启动.

查看活动生命周期图.结论是,要做到这一点正确的方法是将registerOnSharedPreferenceChangeListener()unregisterOnSharedPreferenceChangeListener()onResume()onPause()分别.

  • 但这并不能回答为什么它被调用两次的原因。根据“活动”生命周期,“ onCreate”只能调用一次。如果应用程序进程被杀死,如何附加首选项监听器? (2认同)