关于Glide的原理

原理:

在glide中的with方法中,需要传入上下文,他底层都是调用的getretriever方法,当传入fragment的时候,通过fragment.getactivity的activity的实例。getRetriever通过该方法获取了一个requestManagerRetriever实例,调用了get方法。传入的参数,获取到fragmentMannager通过这个得到requestManagerRetriever实例。Glide和页面的生命周期是绑定到一起的,可以感知调用页面的生命周期。


缓存方式:

[if !supportLists]1. [endif]DiskCacheStrategy.NONE不缓存文件

[if !supportLists]2. [endif]DiskCacheStrategy.SOURCE只缓存原图

[if !supportLists]3. [endif]DiskCacheStrategy.RESULT只缓存最终加载的图(默认的缓存略)

[if !supportLists]4. [endif]DiskCacheStrategy.ALL同时缓存原图和结果图


Glide生命周期管理:


Glide在Glide.with(context)中就实现了生命周期管理,with根据传入的参数有不同的实现。

//传入一个Context    public static RequestManager with(@NonNull Context context)

 //传入一个activity  public static RequestManager with(@NonNull Activity activity)

  //传入一个FragmentActivity  public static RequestManager with(@NonNull FragmentActivity activity) 

 //传入一个Fragment  public static RequestManager with(@NonNull Fragment fragment) 

 //传入一个View  public static RequestManager with(@NonNull View view)

虽然有这么多类型,但其实可以分为两类的。

传入一个ApplicationContext,Glide的生命周期就相当于绑定了整个应用,只要应用不退出,任何时候都能够加载,也可以理解为不对Glide生命周期进行管理。

传入activity、FragmentActivity 、Fragment 及View ,这样就会创建一个看不见的fragment,Glide的生命周期就随着该Fragment的变化而变化。

由于ActivityFragmentLifecycle对象是在fragment中创建并且它的onStart、onStop、onDestory方法与fragment一一对应,这样就将RequestManager的生命周期就与fragment关联起来了,也就与当前activity关联起来。总体流程如下:


关于Glide的原理_第1张图片

当fragment生命周期发生变化时,通过ActivityFragmentLifecycle将变化告诉给RequestManager与DefaultConnectivityMonitor。而RequestManager又将此变化告诉给ImageViewTarget。

至于传入参数为其他类型的实现基本上与activity的类似,就不在叙述。


Glide总结:

[if !supportLists]1. [endif]Glide在加载绑定了Activity的生命周期。

[if!supportLists]2. [endif]在Activity内新建一个无UI的Fragment,这个特殊的Fragment持有一个Lifecycle。通过Lifecycle在Fragment关键生命周期通知RequestManger进行相关的操作。

[if !supportLists]3. [endif]在生命周期onStart时继续加载,onStop时暂停加载,onDestory是停止加载任务和清除操作。

你可能感兴趣的:(关于Glide的原理)