这个类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后现象更明显。所以这样做意义不大。
网友评论