fresco之内存bitmap缓存

最近因为项目优化需要,重温Fresco的内存缓存机制。做了一些简单分析。

类图

流程图

虚线框出来的部分对应缓存资源和获取资源,两个流程里面都会触发移除无用资源,移除的条件是无用资源的数目大于设定(总共-已使用(cacheEntriesCount - exclusiveCacheEntriesCount)),或者是无用资源的体积大小超过了设定(总共-已使用(cacheEntries-exclusiveCache)),每次触发资源释放(releaseClientReference)的时候都会将没有被引用的资源放到无用缓存中。上述流程中,cache触发了缓存,但是要先检查是否满足条件,否则就跳过了,尝试移除无用资源,因此这里的内存缓存可能失效。Fresco能够在View detach的时候自动触发资源回收

内存释放时序图