首先先了解图片三级缓存:
三级缓存可以减少不必要的流量消耗,增加加载速度
1,内存缓存,优先加载,速度最快
2.本地缓存,次优先级加载,速度次之
3.网络缓存,最后加载,速度由网速决定
内存缓存一般使用LruChche缓存策略,首先需要或者应用可用的最大内存,然后设置缓存的可用大小,将图片的缓存大小设为最大缓存的1/8或者1/4
本地缓存首先需要获取SD卡的根目录的路径,然后对图片进行保存和读取。在保存时需要对Url进行MD5加密,将加密后返回的字符串作为关键字创建文件夹,同时保存图片
网络缓存图片时需要将网络获得的图片缓存到内存和SD卡中,因此需要在构造方法中初始化内存缓存工具类和SD卡缓存工具类。这里采用AsyncTask异步栈的方式实现图片的异步下载。
先创建一个glide单例,初始化操作磁盘缓存的线程池
初始化内存大小
AB75BEAB70EC45108F78571C461032A4.jpg
然后进行三级缓存:
4FB5B05B656140CEB4F1967E24C8A24E.jpg
28-29,创建图片URL、宽、高等一系列参数创建key
31-39,从内存缓存弱引用中根据Key获取图片资源,有就返回,没有往下执行
41-49,从内存缓存Lrucache中根绝key获取图片资源,有就返回,没有往下执行
通过以上代码可以看出Glide内存缓存采用了2级,第一级是弱引用,第二级才是Lrucache,如果软引用中没有
对应的图片缓存,就从Lrucache中获取,如果还是没有才去检查磁盘缓存,如果还是没有最后才去网络下载
总结:
3C2ED9095D0C4B53B7E9756CE1F1B12E.jpg
网友评论