美文网首页
AutoClearedValue类记录

AutoClearedValue类记录

作者: 红鲤鱼与绿鲤鱼与驴_a2ef | 来源:发表于2017-08-22 13:21 被阅读0次

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

    相关文章

      网友评论

          本文标题:AutoClearedValue类记录

          本文链接:https://www.haomeiwen.com/subject/wrkhcxtx.html