图片缓存/内存缓存/LruCache

2017-01-13  本文已影响216人  官先生Y

三级缓存

内存缓存

我们的缓存容量是有限的,它会面临一个问题:当有新的内容需要加入我们的缓存,但我们的缓存空闲的空间不足以放进新的内容时,如何舍弃原有的部分内容从而腾出空间用来放新的内容?

解决这个问题的算法有多种,比如LRU,LFU,FIFO等

小结:
不论图片的内存缓存算法是哪一种,这些算法解决的是超出最大值时如何自动回收的问题。

LinkedHashMap

是什么?

LinkedHashMap继承自HashMap,不同的是,它是一个双向循环链表,它的每一个数据结点都有两个指针,分别指向直接前驱和直接后继。

成员变量accessOrder

问题

LruCache怎么知道添加完新元素后是否超过总缓存?

添加新元素后,先调用sizeOf()计算元素大小,在与当前缓存大小相加得到新的缓存大小,最后调用trimMemory()检查并修剪内存。

当添加新元素会超过总缓存,那么怎么基于最近最少使用算法移除元素?

while循环,通过不断调用LinkedHashMap.eldest()获得头节点指向下一个节点(最老节点),然后LinkedHashMap.remove()将其移出,在计算缓存大小,直到缓存大小小于总大小,循环结束。

Android源码解析——LruCache


MyBitmapUtils.display(ImageView ivPic, String url)

NetCacheUtils. getBitmapFromNet(ImageView ivPic, String url)

LocalCacheUtils

MemoryCacheUtils

Android中图片的三级缓存

上一篇下一篇

猜你喜欢

热点阅读