Skip to content

Glide

此文章待完善、较老

EngineResource

  • 使用计数增加时机:
  • 使用计数减少时机:

Glide缓存概述

按介质分内存缓存、硬盘缓存。内存缓存分ActiveResources和MemoryCache,硬盘缓存分ResourceCache和DataCache。

查询顺序也是按上面所说的顺序。

ActiveResources

  • 使用HashMap+WeakReference(ReferenceQueue)来维护。
  • 添加时机:当有任何资源准备就绪,且不处在此map中。
  • 删除时机:当EngineResource的使用计数为0,或GC发生时,WeakReference被回收时。
  • 删除后会放到MemoryCache之中
  • 索引Key

MemoryCache

  • 使用LinkedHashMap实现的LruCache。
  • 添加时机:ActiveResources剔除时候。
  • 删除时机:Lru剔除算法
  • 索引Key

ResourceCache

DataCache

BitmapPool

Target

配置方式代码设计

  • 由于是单例的设计,只需要一次初始化配置。注解标记自定义初始化实现类。使用了APT方案。

加载模式代码设计

  • 维护了一个注册表,用于查询不同的加载目标、数据源类型对应的加载器类。可以自定义添加、替换各种加载器的实现,甚至是最终的GlideUrl.class, InputStream.class的实现,从而可以把网络加载过程使用不同的网络库实现。
  • 对于加载器进行了抽象、加载器完成的callback也进行了抽象。从而可以让Glide的缓存机制脱离于加载器的实现,可以正常运行。