分享

SharedPreferences.onSharedPreferenceChangeListener无效,不被回调

 android之情殇 2014-01-10

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注销。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多