SharedPreference注册OnSharedPreferenceChangeListener一直没法回调问题

注册代码以下:ide

1 SharedPreferences sp = getSharedPreferences("AndroidDemo", Context.MODE_PRIVATE);
2 sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() {
3     @Override
4     public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) {
5     }
6 });
 

没法回调主要是由于注册的监听器使用了匿名内部类,因为SharedPreferences保持在WeakHashMap中,这意味着你不能监听一个匿名内部类,由于它会成为垃圾收集的目标,只要你离开目前的范围,它将会被垃圾收集,从WeakHashMap中删除并中止工做。spa

应该使用当前类做为监听器,即在当前类中实现SharedPreferences.OnSharedPreferenceChangeListener接口,只要当前类的实例没有被回收,就能够保证回调的有效性。code

因此注册此监听时,最好不要使用匿名内部类,不然会因为垃圾回收机制致使此监听无效,而没法回调。blog

相关文章
相关标签/搜索