Android 两层强弱内存缓存:StrongMemoryCache与WeakMemoryCache
这两个开关并不是“两种互斥缓存策略”,而是共同组成一个两层内存缓存:
StrongMemoryCache(有容量上限、LRU、强引用) ↓ 被淘汰/替换/超大条目 WeakMemoryCache(无容量计费、弱引用、机会型命中)默认配置为:
strongReferencesEnabled = true weakReferencesEnabled = true源码位置:
1. 构建时的实际调用链
开发者的配置一般是:
val imageLoader = ImageLoader.Builder(context) .memoryCache { MemoryCache.Builder() .maxSizePercent(context, 0.20) .strongReferencesEnabled(true) .weakReferencesEnabled(true) .build() } .build()MemoryCache.Builder.build()的核心逻辑可概括为:
val weakMemoryCache = if (weakReferencesEnabled) { RealWeakMemoryCache() } else { EmptyWeakMemoryCache() } val strongMemoryCache = if (strongReferencesEnabled) { RealStrongMemoryCache(maxSizeBytes, weakMemoryCache) } else { EmptyStrongMemoryCache(weakMemoryCache) } return RealMemoryCache(strongMemoryCache, weakMemoryCache)即:
强引用开关 | 弱引用开关 | 最终效果 |
|---|---|---|
|
| 默认双层缓存:强 LRU + 弱引用兜底 |
|
| 只有有严格容量限制的强引用 LRU |
|
| 只有弱引用机会缓存,不保证命中 |
|