Android的Glide在加载图片时候内部默认使用了缓存机制,Glide的缓存机制分为两级,第一级是内存缓存,然后第二级是硬盘缓存。缓存的过程首先是在内存中缓存,然后将加载的图片资源缓存到硬盘,这样就可以在随后的再次加载中使用缓存了,
Glide使用缓存时候首先要检查内存这一层级是否缓存了相应的缓存,如果有,则直接使用,如果没有,则深入到硬盘缓存中检查是否有,如果有,则加载之,如果到这一步骤还没有,那么就只能作为一个全新的资源加载了。
从这个过程中,Glide使用缓存无疑大大提高了上层代码的性能,但是,有些情况下,这种缓存策略则可能并不适用。比如,APP中有一个头像,该头像是从一个固定链接http://xxx.xxx.jpg读取,假设代码第一次读取后,缓存到了本地。然而,几分钟后该图片更新了,但是链接仍然是http://xxx.xxx.jpg。随后,假设,三小时或三天或三十天后同样的链接http://xxx.xxx.jpg读取,此时Glide加载时候检查缓存,发现针对http://xxx.xxx.jpg的资源已经缓存,那么Glide不再从服务器读取,而是直接加载本地缓存使用,这样就造成了Glide加载出来的图片资源不是最新的。
总结:Glide的缓存机制虽然提升了性能,但是如果针对固定资源路径的请求,将导致请求得到的资源是缓存的,这样就不能保证最新。换句话说,如果给定资源地址下的资源的频繁更新的,而资源地址是固定,则Glide此时的缓存策略就显得不太合适。
导致这种问题的原因有二:
一, Glide本身使用了缓存。
二, Glide在缓存资源使用<K,V>键值对模型,如果每次都使用