美文网首页
Glide的内存缓存思路

Glide的内存缓存思路

作者: Joe_2e0c | 来源:发表于2019-05-27 10:30 被阅读0次

    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的内存缓存思路

          本文链接:https://www.haomeiwen.com/subject/wcsiuqtx.html