gpt4 book ai didi

java - registerOnSharedPreferenceChangeListener() 方法比较

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:47 29 4
gpt4 key购买 nike

在我维护的一些代码中,我注意到有两种不同的方式来注册共享偏好更改监听器:

(1) 直接的方法,包含注册成员函数的类实现SharedPreferences.OnSharedPreferenceChangeListener .

preferences.registerOnSharedPreferenceChangeListener(mImageView);

(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);

两者都很好,但现在我想知道:一种方法比另一种更可取吗?

在某些情况下,只能这两种方法中的一种实际上可以使用吗?

最佳答案

这取决于实现,就可维护性而言,有些人可能会找到一种或另一种更好的方式来实现他们的 Intent ,有些人只是进一步考虑可读性、自然医学等。

另一方面,当然你可能想防止任何泄漏和垃圾收集问题,如果创建的成员 mPreferencesListener 正在访问你可能在某些问题中运行的任何封闭实例方法,作为好公民,你应该在知道你不会使用它们(例如 onPause、onDestroy 等)后取消注册你的听众,并选择静态内部类而不是成员内部类,并且在匿名和本地内部类访问封闭实例方法时要小心/属性。

现在最后值得一提的是SharedPreferencesImpl使用 WeakHashMap对于它的听众。

关于java - registerOnSharedPreferenceChangeListener() 方法比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12058249/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com