Glide的内存缓存思路

Glide缓存功能相关用法

设置内存缓存开关:

skipMemoryCache(true)

设置磁盘缓存模式:

diskCacheStrategy(DiskCacheStrategy.NONE)

可以设置4种模式:

DiskCacheStrategy.NONE:表示不缓存任何内容。

DiskCacheStrategy.SOURCE:表示只缓存原始图片。

DiskCacheStrategy.RESULT:表示只缓存转换过后的图片(默认选项)。

DiskCacheStrategy.ALL :表示既缓存原始图片,也缓存转换过后的图片。


1)首先Glide内存缓存采用了2种策略,弱引用缓存和LRU算法内存缓存

(2)弱引用缓存就是把图片的弱引用缓存在一个HashMap中,被下载使用的图片首先会缓存在这个弱引用HashMap中。Glide会通过引用计数的方式来记录图片被引用的次数,当引用次数为0时,也就意味着图片资源不再被使用嘛,这时就会将图片资源从这个弱引用缓存中移除,并把这个图片资源加入到LRU算法内存缓存中

(3)LRU算法内存缓存的原理就是将图片资源用强引用的方式存储在LinkedHashMap中,当达到容量限制时移除最近最少使用的资源。Glide会在LRU缓存中的图片被重新使用时将图片资源从LRU缓存中删除,并添加到弱引用的缓存中去。这样做的原因就是防止图片被LRU算法缓存回收。



原理:

  首先根据图片的网络地址在网络上下载图片,将图片先缓存到内存缓存中,缓存到强引用中 也就是LruCache中。如果强引用中空间不足,就会将较早存储的图片对象驱逐到软引用(softReference)中存储,然后将图片缓存到文件(内部存储外部存储)中;读取图片的时候,先读取内存缓存,判断强引用中是否存在图片,如果强引用中存在,则直接读取,如果强引用中不存在,则判断软引用中是否存在,如果软引用中存在,则将软引用中的图片添加到强引用中并且删除软引用中的数据,如果软引用中不存在,则读取文件存储,如果文件存储不存在,则网络加载。

  下载: 网络--内存--文件

  读取: 内存--强引用--软引用--文件--网络

你可能感兴趣的:(Glide的内存缓存思路)