我有一个偏好活动,首先当我有机会偏好时,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()分别.
| 归档时间: |
|
| 查看次数: |
4613 次 |
| 最近记录: |