Glide缓存机制

上一篇文章介绍了Glide的源码解析 的主线流程,这里说下Glide的缓存机制。

缓存机制加载流程

Glide 的缓存层级包括:

活动缓存:存放所有正在访问的图片。

内存缓存(LRU)、磁盘缓存(LRU)、模型model(网络,io)。

Glide的整体缓存流程如下:

  1. 页面加载图片时,先去活动缓存获取。如果有直接加载;
  2. 如果活动缓存没有,则从内存缓存获取。如果有,则把内存缓存中的图片拿到活动缓存,然后再去加载;
  3. 如果内存缓存没有,则去磁盘缓存中获取。如果有,则把磁盘缓存中的图片复制一份到活动缓存中,然后再去加载;
  4. 如果磁盘缓存中没有,则去model中获取。获取到则在磁盘缓存和活动缓存中保存下来,然后再显示;
  5. 如果页面销毁,则将活动缓存中的资源移动到内存缓存中;
  6. 如果进程杀掉,活动缓存和内存缓存属于运行时缓存,再次启动会从磁盘缓存中获取,并复制到活动缓存然后显示;
LRU 机制

遵循原则:最近最少使用

这里简单的提一下,不做深究。

LruCache是使用LinkedHashMap来管理缓存的。

    public LruCache(int maxSize) {
        if (maxSize <= 0) {
            throw new IllegalArgumentException("maxSize <= 0");
        }
        this.maxSize = maxSize;
      // true 访问优先
        this.map = new LinkedHashMap<K, V>(0, 0.75f, true);
    }
  • put

LruCache调用put的时候,都会判断是否大于maxSize,如果大于就移除最近最少使用的元素。

如果集合中已经有相同的元素,则将旧的移除掉。

总结

Glide的缓存机制采用了活动缓存、内存缓存、磁盘缓存。活动缓存的设计解决了当maxSize比较小而页面图片多不停put时,直接使用内存缓存LRU机制可能出现的使用中而被移除的问题。

等有时间再补一张流程图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值