Android开发-Glide总结

参考资料:Glide框架及源码解析

绑定生命周期

Glide会为每一个RequestManager绑定一个特殊的Fragment,并且添加生命周期回调,这样RequestManager就可以根据Fragment生命周期的改变,开始或者暂停释放Request

数据缓存

Glide使用内存缓存和磁盘缓存
内存缓存LruChahe,ActiveResources(保存正在使用的资源)
磁盘缓存使用LRU算法

重要的类

  • RequestManagerRetriever:单例,主要用于创建RequestManager,RequestManagerFragment

  • RequestManager:主要用于管理Request,一个RequestManagerFragment对应一个RequestManager,RequestManager会将自己注册到相应Fragment的ActivityFragmentLifecycle中,这样Fragment的生命周期变化,会通知RequestManager,RequestManager持有一个RequestTracker,和一个TargetTracker

  • RequestTracker:保存了这个RequestManager中的所有Request,有助于RequestManager开始或者暂停Request

  • TargetTracker:保存了这个RequestManager中的所有Target

  • ActiveResources:保存了所有正在使用中的资源,加载资源时,首先会从ActiveResources中获取,如果获取不到则从LruCache中加载,如果加载到了,则将资源从LruCache中一处,添加到ActiveResources中

  • Request:每一个图片加载的请求都会封装成一个Request对象,并且加入RquestManager中,然后去调用begin方法,去执行Request,Request在创建的时候会和相应的Target绑定,因此在创建一个Request对象时候,首先判断这个Target是否已经有了一个Request,如果已经有了,则将之前的Request清除掉,因此ListView在复用View的时候,就不会发送无用的请求

  • Engine:数据加载引擎,首先从ActiveResources中加载,加载不到从LruCache中加载,还加载不到,创建EngineJob和DecodeJob对象

  • EngineJob:创建EngineJob时会先判断是否已经有了相同key值(即相同请求)的EngineJob,如果存在只需要添加一个新的CallBack,如果不存在创建新的EngineJob对象

  • DecodeJob:DecodeJob是一个Runnable对象,正在加入线程池中加载数据的类,DecodeJob首先会从磁盘加载,如果加载不到则从网络加载,加载数据时会创建相应的DataFetcherGenerator对象,真正的去加载对象

猜你喜欢

转载自blog.csdn.net/qq_19694479/article/details/80945820
今日推荐