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注销。 |
|
来自: android之情殇 > 《android》