//with构建出RequestManager,调用l.oad生产RequestBuilder默认降属性设置为Bitmap将资源保存到RequestBuilder里面的一个属性。
//调用into的时候RequestBuilder类里面先构建出一个Tartget,然后在构建出一个Request这个Request是SingleRequest这个类。通过target取出之前的request回收掉recyle
//然后调用RequestManager的track方法将request传进去。接着在track方法里面判断当前Glide的状态,如果是暂停状态加入到等待准备请求的集合中
//如果运行状态调用Request的begin方法,判断Request的状态。如果正在运行直接抛异常,如果已经完成直接调用onResourceReady方法直接设置图片资源
//如果都不是说明这个请求是第一次,接下来就开始计算ImageView控件的宽度和高度了,如果用户指定宽度直接调用OnSizeReady,否则调用getSize,Glide自己去根据图片的大小设置宽高
//测量完后还是调用OnSizeReady。在OnSizeReady方法里面再根据一些参数创建出一个key来(上面的target和Request也是根据一堆复杂的参数创建出来的。这里不用管那些复杂的参数是什么)
//根据key在去你的三级缓存里面去找。一:activity resource活动资源缓存里面找这个使用弱引用来保存Bitmap对象。二:缓存:内存缓存 使用LruCache来缓存图片Bitmap
//三:磁盘缓存:使用DiskLruCache来缓存Bitmap对象。如果都没找到构建出一个engineJob和一个decodeJob,最后调用engineJob的start方法把decodeJob放进去
//decodeJob实现了Runable接口。所以start方法是执行了里面的run方法在这个里面去请求网络通过HttpUrlConnection进行请求。
//网络请求数据回来之后最终调用onResourceReady方法设置图片(这里注意前面提到过如果请求是完成状态就可以直接调用)。这个是Glide源码分析。只做了load方法和into方法的分析
//那个with方法里面很简单可以去看一下就可以知道是什么。Glide优点:1.自己有生命周期with方法里面体现 2.可以自己判断图片大小不会把整个图片全都加载到内存中3.三级缓存
Glider原理
最新推荐文章于 2022-06-24 12:24:51 发布