SharedPreference注冊OnSharedPreferenceChangeListener一直無法回調問題


注冊代碼如下:

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中刪除並停止工作。

應該使用當前類作為監聽器,即在當前類中實現SharedPreferences.OnSharedPreferenceChangeListener接口,只要當前類的實例沒有被回收,就可以保證回調的有效性。

所以注冊此監聽時,最好不要使用匿名內部類,否則會由於垃圾回收機制導致此監聽無效,而無法回調。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM