這個類AutoClearedValue
比較有意思,它用于保存一個引用,并監聽Fragment的狀態,當Fragment銷毀UI后將該引用置空。這種方式免去了每個Fragment里都要在相應生命周期方法里處理特定變量的麻煩:
/**
* 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寫一個?
在mvvm中,activity一般只負責創建fragment等實例,以及頁面跳轉等,并不需要持有多少引用,特別是引入dagger2后現象更明顯。所以這樣做意義不大。