這個(gè)類AutoClearedValue
比較有意思托慨,它用于保存一個(gè)引用,并監(jiān)聽(tīng)Fragment的狀態(tài)定罢,當(dāng)Fragment銷毀UI后將該引用置空族购。這種方式免去了每個(gè)Fragment里都要在相應(yīng)生命周期方法里處理特定變量的麻煩:
/**
* A value holder that automatically clears the reference if the Fragment's view is destroyed.
* @param <T>
*/
public class AutoClearedValue<T> {
private T value;
public AutoClearedValue(Fragment fragment, T value) {
FragmentManager fragmentManager = fragment.getFragmentManager();
fragmentManager.registerFragmentLifecycleCallbacks(
new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentViewDestroyed(FragmentManager fm, Fragment f) {
AutoClearedValue.this.value = null;
fragmentManager.unregisterFragmentLifecycleCallbacks(this);
}
},false);
this.value = value;
}
public T get() {
return value;
}
}
是否也可以依照類似的思路,為Activity寫(xiě)一個(gè)抵拘?
在mvvm中哎榴,activity一般只負(fù)責(zé)創(chuàng)建fragment等實(shí)例,以及頁(yè)面跳轉(zhuǎn)等,并不需要持有多少引用尚蝌,特別是引入dagger2后現(xiàn)象更明顯迎变。所以這樣做意義不大。