Glide

Glide是一个图片加载框架,用于android中加载图片。

加载图片的时候常用的方法有三个,with(),load(),into()。

with()方法

with()方法用于创建一个加载图片的实例。with()方法可以接收Context、Activity或者Fragment类型的参数。也就是说我们选择的范围非常广,不管是在Activity还是Fragment中调用with()方法,都可以直接传this。也可以传入当前应用程序的ApplicationContext,with()方法中传入的实例会决定Glide加载图片的生命周期,如果传入的是Activity或者Fragment的实例,那么当这个Activity或Fragment被销毁的时候,图片加载也会停止。如果传入的是ApplicationContext,那么只有当应用程序被杀掉的时候,图片加载才会停止。

load()方法

用于指定待加载的图片资源。Glide支持加载各种各样的图片资源,包括网络图片、本地图片、Uri对象等等。因此load()方法也有很多个方法重载,load()方法会将你传递进来的图片地址放到RequestBuilder(请求构建器)中。

into()方法

into()方法,这个方法就很简单了,我们希望让图片显示在哪个ImageView上,把这个ImageView的实例传进去就可以了。在into函数中,有一行代码:requestManager.track(target, request);这个就是最核心的方法,它才是真正触发请求、编解码、装载、缓存等这些功能的。

缓存机制

内存缓存

使用LruCache作为内存缓存,LruCache实际上就是一个LinkedHashMap( 补充知识:LinkedHashMap是一个双向循环列表,不支持线程安全,LruCache对它进行了封装添加了线程安全操作)。内存缓存使用弱引用和LruCache结合完成的,弱引用来缓存的是正在使用中的图片。图片封装类Resources内部有个计数器判断是该图片否正在使用。根据计数器的值判断是否正在使用,如果在使用放进弱引用里,没有使放到LruCache里。

获取缓存图片

调用了loadFromCache方法来获取缓存图片。 当我们从LruResourceCache中获取到缓存图片之后会将它从LruResourceCache缓存中移除,将缓存图片存储到activeResources当中。activeResources就是弱引用的HashMap,用来缓存正在使用中的图片。

磁盘缓存

Glide是使用的自己编写的DiskLruCache工具类,进行的图片的缓存管理,

存:先存原图,再存处理后的图。

读:先通过decodeSourceFromCache()来获取处理后的图片,没有的话再通过decodeResultFromCache()来获取原图。

区别

1、with()绑定生命周期

2、缓存大小 

Picasso 是下载图片然后缓存完整的大小到本地,Glide 则是完全不一样的做法。Glide 是会先下载图片,然后改变图片的大小,以适应 imageView 的要求,然后缓存到本地.

3、缓存机制

二级 三级

4、缓存内存

Glide 默认是用的 RGB_555 的设定,PIcasso 则是用的 ARGB _8888的设定

5、动态图、圆形图

Glide加载圆形图片是通过setCornerRadius()来加载

asBitMap来指定静态图

asGif来指定动态图


你可能感兴趣的:(Glide)