草庐IT

java - registerOnSharedPreferenceChangeListener() 方法比较

coder 2023-12-16 原文

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

(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/

有关java - registerOnSharedPreferenceChangeListener() 方法比较的更多相关文章

随机推荐