我有一个实现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
答案 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);
}
这与你正在做的非常相似,除非我们保持一个硬参考。