赞
踩
Glide是目前市场上比较流行的图片加载框架,使用起来很方便,一堆链式调用就可以加载一张网络图片了。第一次加载会比较慢,当我们下次再次加载这张图片的时候,速度将会质的飞跃。这是因为它的图片缓存机制做的非常好。从源码中可以看出,他会用了三级缓存策略,分别是:活动缓存、内存缓存、磁盘缓存。本章将会讲解活动缓存是如何进行设计的
说到缓存策略,就不得不说一下,四种引用的区别了:
我们的活动缓存使用了弱引用,来保存bitmap对象。
当我们将网络图片加载到活动缓存的时候,需要设计一个key,来标识当前缓存中对应的图片,方便下次能够直接取出来用。这里的key表示当前图片的key,必须唯一。代码如下:
注意这里为了保证key的唯一性,使用了SHA256加密。
该类主要保存了图片的bitmap对象,代码如下:
这里设置了一个计数器count,目的就是:当对象没有不再使用的时候(即值小于或等于0),告诉外界这个对象没有在活动缓存中使用了,可以采取其他缓存策略。
每当我们使用一次对象的时候,需要count进行+1操作,使用完成以后,进行-1操作,所以这个类已提供了这个两个方法,代码如下:
不再使用该对象的回调接口callback的设计如下:
weakReferenceMap:保存当期图片的弱引用集合,key就是上面说到的唯一key,value就是图片对象的弱引用。
mQueue:当弱引用被回收的时候,需要监听被回收的对象,以便从集合weakReferenceMap中进行移除。
将Value对象存放到map集合中
这里使用了自定义的CustomWeakReference,而不是直接使用WeakReference。这样做的目的就是为了能够监听到当前对象弱引用被回收的情况。
开启子线程,不断监听当前弱引用对象是否被垃圾回收器回收。mQueue.remove()方法是一个阻塞方法,也就是如果没有回收的话,就会一直等待。否则,从weakReferenceMap集合中移除,属于被动回收。
提供给外界主动调用。
此时需要关闭回收线程的轮训任务,并且清空弱引用集合,回收资源。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。