首页 > 代码库 > SharedPreference注册OnSharedPreferenceChangeListener一直无法回调问题
SharedPreference注册OnSharedPreferenceChangeListener一直无法回调问题
注册代码如下:
1 SharedPreferences sp = getSharedPreferences("AndroidDemo", Context.MODE_PRIVATE);2 sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() {3 @Override4 public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) {5 }6 });
无法回调主要是因为注册的监听器使用了匿名内部类,由于SharedPreferences保持在WeakHashMap中,这意味着你不能监听一个匿名内部类,因为它会成为垃圾收集的目标,只要你离开目前的范围,它将会被垃圾收集,从WeakHashMap中删除并停止工作。
应该使用当前类作为监听器,即在当前类中实现SharedPreferences.OnSharedPreferenceChangeListener接口,只要当前类的实例没有被回收,就可以保证回调的有效性。
所以注册此监听时,最好不要使用匿名内部类,否则会由于垃圾回收机制导致此监听无效,而无法回调。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。