LruCache 中 Lru 算法的实现就是通过 LinkedHashMap 来实现的。LinkedHashMap是Hashmap的子类,它内部使用一个双向链表来存储 Map 中的 Entry 顺序关系, 对于 get、put、remove 等操作,LinkedHashMap 除了要做 HashMap 要做的事,还会调整 Entry 顺序链表。LruCache 中将 LinkedHashMap 的顺序设置为 Lru 顺序来实现 Lru 缓存,每次调用 get(也就是从内存缓存中取图片),则将该对象移到链表的尾端。调用 put 插入新的对象也是存储在链表尾端,这样当内存缓存达到设定的最大值时,将链表头部的对象移除。
那么 LruCache 的怎么回收bitmap
LruCache 每次添加 Bitmap 图片缓存的时候(put 操作),都会调用 sizeof 方法,返回 Bitmap 的内存大小给 LruCache,然后循环增加这个 size。当这个 size 内存大小超过初始化设定的 cacheMemory 大小时,则遍历map 集合,把最近最少使用的元素(头部) remove 掉.
01-31
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交