美文网首页
ImageLoader 、glide图片框架介绍

ImageLoader 、glide图片框架介绍

作者: 天使飞吧 | 来源:发表于2019-06-27 20:25 被阅读0次

Universal Image Loader:一个强大的图片加载库,包含各种各样的配置,最老牌,使用也最广泛。不支持gif

Picasso: Square出品,必属精品。和OkHttp搭配起来更配呦!不支持gif 内存占大

Fresco:Facebook出的,天生骄傲!不是一般的强大。

Glide:Google推荐的图片加载库,专注于流畅的滚动。Glide配置十分灵活,默认使用RGB_565的Bitmap ,默认使用HttpUrlConnection下载图片。 

加载原理:

1:Glide.with(context)创建RequestManager

通过传入的context对象,RequestManager可以根据它的生命周期来管理当前的Request图片加载请求。

2:Glide.with(context).load(url)创建需要的Request

在这个方法根据我们需要进行设置,比如MemoryCache配置,error,展示等,相当于Glide加载图片的执行单位;

3:Glide.with(context).load(url).into(imageview) 

如果已经有缓存了,那就直接用,没有的话会根据这个imageview的宽高进行加载。

缓存原理:

1:内存缓存:

使用内存缓存可以获得更快的图片加载速度,因为减少了耗时的IO操作。Glide中有一个叫做BitmapPool的类,可以复用其中的Bitmap对象,从而避免Bitmap对象的创建,减小内存开销

2:硬盘缓存:

Glide目前提供了四种缓存策略:

•DiskCacheStrategy.NONE  不缓存文件

•DiskCacheStrategy.SOURCE  只缓存原图

•DiskCacheStrategy.RESULT  只缓存最终加载的图(默认的缓存策略)

•DiskCacheStrategy.ALL  同时缓存原图和结果图

Fresco

背景:

Android 3.0以后,android的bitmap的数据存储在java heap中,java对dvm的heap大小是有限制的如果超过了这个限制,就会抛出OOM异常,于是fresco在native层申请内存来代替部分java层的内存,ashmem-匿名共享内存;这样Bitmap对象的创建、释放将永远不会触发GC,它的管理由Linux内核驱动管理。5.0以上系统,由于内存管理的优化,所以对于5.0以上的系统Fresco将Bitmap缓存直接放到了堆内存中

使用了三级缓存:Bitmap缓存+未解码图片缓存+硬盘缓存。

其中前两个就是内存缓存,Bitmap缓存根据系统版本不同放在了不同内存区域中,而未解码图片的缓存只在堆内存中,加快图片的加载速度,Fresco的加载图片的流程为:查找Bitmap缓存中是否存在,存在则直接返回Bitmap直接使用,不存在则查找未解码图片的缓存,如果存在则进行Decode成Bitmap然后直接使用并加入Bitmap缓存中,如果未解码图片缓存中查找不到,则进行硬盘缓存的检查,如有,则进行IO、转化、解码等一系列操作,最后成Bitmap供我们直接使用,并把未解码(Encode)的图片加入未解码图片缓存,把Bitmap加入Bitmap缓存中,如硬盘缓存中没有,则进行Network操作下载图片,然后加入到各个缓存中。

相关文章

网友评论

      本文标题:ImageLoader 、glide图片框架介绍

      本文链接:https://www.haomeiwen.com/subject/yfsdcctx.html