AutoClearedValue类记录

2017-08-22  本文已影响0人  红鲤鱼与绿鲤鱼与驴_a2ef

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

上一篇下一篇

猜你喜欢

热点阅读