之前一篇文章带大家学习了活动缓存,本章将继续学习内存缓存。首先使用了LruCache算法(最近使用)缓存策略,什么是LruCache算法呢?这里对算法内部具体实现不做研究。先看一下android提供的源码:
一、LruCache
内部其实就是使用了LinkedHashMap的机制,设置为true,表示激活使用排序。使用排序的规则是如何呢?如下图:
总之一句话:只要集合中某个元素被使用了,它将会被放到集合的最顶端,也就是最不容易被回收的位置,其他的元素将重新排列。排在最末尾的是最容易被回收的。使用LruCache需要重写它的sizeOf()方法,计算对象需要的内存大小。
二、内存缓存类
1、sizeOf()
注意,4.4版本前后获取内存的大小是不一样的,两者的区别用一张图表示如下:
2、entryRemoved() 被动回收
为了能够实时监测被回收的缓存对象,需要重写该方法
3、主动回收
调用父类的remove()方法,然后还是会调用entryRemoved()方法,将移除的对象返回给调用者。
4、回调
get()和put()方法使用LruCache类提供的方法即可。该类的设计关键在于拿到被回收的对象以及计算对象的大小。