java - registerOnSharedPreferenceChangeListener() 方法比较

标签 java android listener

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

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

相关文章:

php - 在哪里保存数据?

java - 从监听器访问非最终对象

android - 如何设置应用内结算项为已使用状态?

java - 与 Oracle DB 连接时网络适配器无法建立连接

java - java中如何知道锁的信息?

java - android webview导致空指针

android - 如何在用户选择项目时获取 recyclerview 中项目的 ID

java - 在android中进行回调的简单方法 - AndroidX

java - 如何用Java中的匿名类替换监听器?

java - 使用 Jackson 排除自定义解串器