实现OnSharedPreferenceChangeListener是不是很糟糕?

时间:2011-08-25 03:56:10

标签: android sharedpreferences

我有一个实现OnSharedPreferenceChangeListener的preferenceActivity,我已经实现了onSharedPreferenceChanged方法。我使用关键字“this”在onResume和onPause()中注册和取消注册一个监听器

到目前为止一切运作良好,但我担心我的监听器将被垃圾收集,如in this post所述。我在做什么不好的做法?看起来太容易但如果没有破坏我不想解决它!

我的活动

public class MyPreferences extends PreferenceActivity implements
        OnSharedPreferenceChangeListener {
    //blah blah blah
}

我的onSharedPreferenceChangeListener

@Override
public void onSharedPreferenceChanged(SharedPreferences sp, String key) {
    doMyStuff();
} //onSharedPreferenceChanged

onResume()&的onPause()

@Override     
protected void onResume() {
    super.onResume();
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);     
} //end onResume

@Override     
protected void onPause() {         
    super.onPause();
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
} //end onPause

2 个答案:

答案 0 :(得分:0)

我不认为这会是一个问题,因为类本身就是监听器,只会被销毁并在调用finish()之后收集垃圾。

答案 1 :(得分:0)

您发布的此链接每次活动恢复时都会创建一个实例

那么如何保持参考

OnSharedPreferenceChangeListener myPrefListner = new OnSharedPreferenceChangeListener(){
      public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
         // your stuff
      }
}

和你的onResume和onPause

@Override     
protected void onResume() {
    super.onResume();          
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(myPrefListner);     
}



@Override     
protected void onPause() {         
    super.onPause();          
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(myPrefListner);

}

这与你正在做的非常相似,除非我们保持一个硬参考。