Android JetPack 原理浅析

2019-08-06  本文已影响0人  ZuYuan

前言

我就不在文章里面讲这一套框架的用法了,直接讲我在学习过程中的一些理解吧。讲得比较简单,比较喜欢深挖源码的伙伴可以去那些大佬的博客看看~

本篇文章涉及:Data Binding、Lifecycle、LiveData、ViewModel、Navigation

Data Binding

Lifecycle

    boolean hasLifecycleMethods(Class klass) {
        if (mHasLifecycleMethods.containsKey(klass)) {
            return mHasLifecycleMethods.get(klass);
        }

        Method[] methods = getDeclaredMethods(klass);
        for (Method method : methods) {
            OnLifecycleEvent annotation = method
                      .getAnnotation(OnLifecycleEvent.class);
            if (annotation != null) {
                createInfo(klass, methods);
                return true;
            }
        }
        mHasLifecycleMethods.put(klass, false);
        return false;
    }

每当我们添加一个观察者的时候都会调用到该方法呢,通过反射将观察者中被OnLifecycleEvent注解的方法找到,通过键值对的方式存在一个叫做mCallbackMap的HashMap中。

LiveData

ViewModel

        private Map<Activity, HolderFragment> mNotCommittedActivityHolders = new HashMap<>();
        private Map<Fragment, HolderFragment> mNotCommittedFragmentHolders = new HashMap<>();

这样两个容器,可能有的小伙伴开始紧张了,又有static又有activity强引用,这结果是啥?别急,我们接着往下看,简而言之,利用activity.getApplication().registerActivityLifecycleCallbacks(mActivityCallbacks)这一行代码可以向Application注册一个监听器,每当移除一个Activity的时候,就去mNotCommittedActivityHolders里面找对应的activity移除,以删除对Activity的强引用。Fragment也是同理,只不过Fragment使用得是parentFragment.getFragmentManager()来注册监听。

Navigation

上一篇下一篇

猜你喜欢

热点阅读