今天搞一個自定義DialogFragment,使用了architecture架構,這裏出現了內存泄漏,上代碼:
MutableLiveData<List<String>> mlist = new MutableLiveData<>();
mlist.observe((LifecycleOwner) getActivity(), new Observer<List<String>>() {
@Override
public void onChanged(@Nullable List<String> strings) {
adapter.replace(strings);
}
});
報的是實現lifecycle接口的類內存泄漏,也就是宿主Activity了,我在這裏使用了MutableLiveData來處理list發生的變化,這裏需要在當前頁面被finish的時候把對宿主Activity的引用釋放掉,所以需要加上這麼一行代碼
@Override
public void onDestroy() {
if (disposable != null) {
//此處可以忽略
disposable.dispose();
}
if(mlist != null){
mlist.removeObservers((LifecycleOwner) getActivity());
}
super.onDestroy();
}