43. Glide核心源码解析

with-空白fragment

Glide中with函数有很多的重载方法,可以传入Context,Activity,FragmentActivity,v4.Fragment,android.app.Fragment,View等等,而这些参数的类型决定了Glide的作用域。这些作用域可以分为Application作用域(从应用启动到应用销毁)和非Application作用域(从页面启动到页面销毁),针对非Application作用域,Glide会在with函数中创建出一个空白的fragment和当前页面(如Activity)绑定,这样以来就可以监听到当前页面的启动和销毁的一系列生命周期(Glide主要监听onStart onStop onDestroy),从而做到在页面启动之后开启图片的加载,在页面退出之后暂停图片的加载,以及对活动缓存的一些列操作等等。

精确到代码层面,Glide在with函数调用的时候会有两个关键的类被创建出来,一个是上面提到的Fragment(如RequestManagerFragment),另一个就是ReqeustManager,专门负责生命周期的管理。在ReqeustManager创建的时候,会持有RequestManagerFragment中的lifecycle对象的引用,并将当前ReqeustManager注册到RequestManagerFragment lifecycle的集合中,而RequestManagerFragment监听到生命周期的回调之后就回通过遍历lifecycle集合通知到每一个ReqeustManager,ReqeustManager就可以管理到Glide加载的生命周期了。

load

load函数的逻辑很简单,他也有多种重载方法,见下图


但是不管是哪种方法,执行的都是下面的代码,通过RequestBuilder去load,而RequestBuilder中又有多种load的重载

  public RequestBuilder<Drawable> load(@Nullable Integer resourceId) {
    return asDrawable().load(resourceId);
  }
  public RequestBuilder<Drawable> asDrawable() {
    return as(Drawable.class);
  }

最终调用到,所以load方法只是保存了资源的地址而已

  private RequestBuilder<TranscodeType> loadGeneric(@Nullable Object model) {
    this.model = model;
    isModelSet = true;
    return this;
  }

into

未完,待续,,,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章