ate*_*iob 5 java android listener
在我维护的一些代码中,我注意到两种不同的方式来注册共享首选项更改侦听器:
(1)直接的方法,其中包含注册成员函数的类实现SharedPreferences.OnSharedPreferenceChangeListener.
preferences.registerOnSharedPreferenceChangeListener(mImageView);
Run Code Online (Sandbox Code Playgroud)
(2)间接方法,其中可能包含已注册成员函数的类,由于某种原因不喜欢实现SharedPreferences.OnSharedPreferenceChangeListener,而是选择定义和实例化仅专用于此侦听器的全新类:
SharedPreferences.OnSharedPreferenceChangeListener mPreferencesListener =
new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
// do here what's needed to do
}
};
....
preferences.registerOnSharedPreferenceChangeListener(mPreferencesListener);
Run Code Online (Sandbox Code Playgroud)
两者都运作良好,但现在我想知道:一种方法优于另一种方法吗?
是否存在实际使用这两种方法中只有一种的情况?
这取决于实现,在可维护性方面,有些人可能会发现一种或其他方式更适合他们的意图,有些人只是进一步考虑可读性、自然医学等。
另一方面,当然您可能希望防止任何泄漏和垃圾收集问题,如果成员创建的话mPreferencesListener正在访问您可能会在某些问题中运行的任何封闭实例方法,作为一个好公民,您应该在知道后注销您的侦听器您不会使用它们(例如 onPause、onDestroy 等)并选择静态内部类而不是成员内部类,并且在匿名和本地内部类访问包含实例方法/属性时要小心。
最后值得一提的是,目前SharedPreferencesImpl使用 Wea kHashMap作为其侦听器。