- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我维护的一些代码中,我注意到有两种不同的方式来注册共享偏好更改监听器:
(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/
我试图通过更改首选项来更新我的应用程序背景颜色,但从未达到 onSharedPreferenceChanged 方法。首选项已成功更改,但监听器无法正常工作: 主要 Activity : public
我试图通过更改首选项来更新我的应用程序背景颜色,但从未达到 onSharedPreferenceChanged 方法。首选项已成功更改,但监听器无法正常工作: 主要 Activity : public
在我维护的一些代码中,我注意到有两种不同的方式来注册共享偏好更改监听器: (1) 直接的方法,包含注册成员函数的类实现SharedPreferences.OnSharedPreferenceChang
这个问题在这里已经有了答案: SharedPreferences.onSharedPreferenceChangeListener not being called consistently (8
您好,我遇到了在 MainActivity 中注册 onSharedPreferenceChangeListener 的问题。我唯一的偏好是具有 3 个不同选项的 ListPreference。因此,
当我调用 Intent 时 public class TInfo extends ListActivity implements OnSharedPreferenceChangeListene
每当我尝试添加这一行时,它都会使我的应用程序崩溃。我没有把它放在正确的位置吗? preferences.registerOnSharedPreferenceChangeListener(myA
我是一名优秀的程序员,十分优秀!