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

相關文章
相關標籤/搜索