Glide.with()这个方法调用
图一当requestManagerRetriever.get()返回RequestManagerRetriever对象
RequestManagerRetriever调用get方法
图二这个方法判断了Glide.with时候传入的context,根据context调用不同的方法,以:this.get((FragmentActivity)context);举例
图三判断当前线程是否在主线程,不是的话回去调用图二中的getApplicationManager方法,咱们只看是主线程的问题
当在主线程,判断了当前的activity是不是被销毁,销毁则抛异常
否则获取当前acticity的FragmentManager对象调用图三方法,并且将当前的ac的fragmentManager传递进去
图四第一个方法:this.getSupportRequestManagerFragment(fm),通过这里面获取一个自定义的fragment,图五的方法
图五他会根据tag获取fragment,避免一个activity中多次使用Glide时候重复创建问题,也会在自己的缓存map中去查找,是否存在,如果不存在的话则会创建,咱们看这个类中的生命周期方法,都有lifecycle它是在类创建的时候同时创建图六
图六继续解读图三中的方法,首次的时候requestManage肯定是空的,所以创建requestManager,并将requestManager和lifecycle设置到SupportRequestManagerFragment中去。这样requestManager和SupportRequestManagerFragment关联,requestManager里面维护lifecycle集合(这是一个典型的观察者模式)
这样图一Glide.with方法就获取到了RequestManager对象,并且RequestManager创建的时候创建了Glide对象
网友评论