开发者

Is implementing the OnSharedPreferenceChangeListener bad practice?

I have a preferenceActivity that implements OnSharedPreferenceChangeListener and I have implemented the onSharedPreferenceChanged method. I register and unregister a listener in onResume and onPause() using the keyword "this"

All works well so far but I am concerned that my listener will be garbage collected, as described in this post. Is what I am doing bad practice? Seems too easy but if it not broken I don't want to fix it!

My activity

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

My onSharedPreferenceChangeListener

@Override
public void onSharedPreferenceChanged(SharedPreferences sp, String key) {
    doMyStuff();
开发者_JAVA百科} //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


I don't think this will be an issue, since the class itself is the listener, and will only be destroyed and garbage collected after finish() has been called.


this link you posted is creating an instance each time the activity resumes

so how about keep the reference

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

and in your onResume and onPause

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



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

}

this will very similar to what you are doing except we are maintaining a hard reference.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜