打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SharedPreferences.onSharedPreferenceChangeListener无效,不被回调
2012-12-13 11:43:45|  分类:Android 数据存储 |字号
注册此监听的时候,最好不要使用匿名内部类,否则会由于垃圾回收机制导致,次监听无效,而无法回调.
这是一个鬼鬼祟祟的。 SharedPreferences保持在一个WeakHashMap的听众。这意味着你不能使用一个监听一个匿名内部类,因为它会成为垃圾收集的目标,只要你离开目前的范围。它将工作在第一,但最终会被垃圾收集,从WeakHashMap中删除,并停止工作。
保持一个参考监听器,在您的类的领域,你将被确定,只要你的类的实例不被破坏。
即,而不是:
prefs.registerOnSharedPreferenceChangeListener(
新SharedPreferences.OnSharedPreferenceChangeListener(){
公共无效onSharedPreferenceChanged(SharedPreferences首选项,String键){
/ /执行
}
});
做到这一点:
/ /使用实例字段为监听器
/ /它不会被gc'd只要保持引用此实例
LISTENER =新SharedPreferences.OnSharedPreferenceChangeListener(){
公共无效onSharedPreferenceChanged(SharedPreferences首选项,String键){
/ /执行
}
});
prefs.registerOnSharedPreferenceChangeListener(监听器);
onDestroy方法注销的原因解决问题,因为这样做,你不得不保存在一个字段中的监听器,因此,防止问题。储蓄字段中的监听器修复了什么问题,而不是在onDestroy注销。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Oracle数据库监听配置(5)
关于Oracle实例和监听启动顺序问题
你的手机可以设置成监听器,你知道吗?在外面也能监听屋内情况
使用JavaScript给对象修改注册监听器
解决ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
Oracle 监听器 Listener
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服