Glide缓存理解

800 阅读2分钟

Glide分为四级缓存,分别为activecache,memorycache,diskdatacache,diskresourcecache。 activecache为活动缓存,缓存正在使用的图片;memorycache为内存缓存;diskdatacache为磁盘缓存的原图片缓存;diskresourcecache为磁盘缓存的处理后图片缓存。其中前两者为内存中的缓存,后两者为磁盘中的缓存。

activecache为面向用户展示的缓存,该级缓存是通过弱引用维护,然后保存在hashmap中。

取:当APP需要请求图片时,首先从该缓存中根据key查询,如果查询得到,那么将该图片的引用次数acquire加1,并将查询得到的图片展示给用户;

清:当用户滑动页面该图片为不可见状态或者页面调用ondestroy方法销毁时,会调用onrelease()方法从activecache中释放该图片。此时会将图片的引用acquire减1,如果acquire<=0说明当前页面已经不引用该图片,那么该图片会从activecache中删除,并存入memorycache中。

存:当用户请求某图片时,如果四级缓存中都未获取到,那么会进行网络请求,请求成功后,会将图片缓存至activecache中。

memorycache:如果用户请求图片在activecache中没找到,那么会继续往memorycache中查找。如果找到该图片,那么返回该图片,并在memrorycache中删除该图片,但在返回之前会给该图片引用acquire加1记录图片引用次数,并且将该图片放进activecache中。该级内存缓存运用了lrucache的原理。如果缓存满了,用最少使用算法清除最不常用的图片(根据图片被引用次数acquire清除)。

对于磁盘缓存,比较灵活可以根据需求自己设置:调用diskCacheStrategy(DiskCacheStrategy.NONE)其中参数有四种:all,none,data,resource,autonatic。 all:表示即缓存原始图片也缓存转换处理过后的图片; none:不进行磁盘缓存; data:只缓存原始图片; resource:只缓存转换处理过后的图片; automatic:默认策略,如果是远程图片,则只缓存原始图片;如果是本地图片,那么只缓存转换过后的图片。 根据以上总结,总的来说只有两种磁盘缓存方式,1.原始图片缓存,2.处理后的图片缓存。并且这两种可以混合使用。 底部原理是采用DiskLruCache做的。