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注销。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。