Android的开发之&论图片加载Glide、Fresco、Picasso、ImageLoader特点和优缺点

Glide 图片加载框架
一,简介:
Glide 是一款谷歌官方推荐使用的强大图片加载框架 作者是bumptech,这个库被广泛运用在谷歌的开源项目中。

二,功能特点:
1,图片异步加载,设置加载尺寸,设置加载动画,设置加载中和加载失败的图片,加载的图片格式丰富:JPG,PNG,GIF,WEBP支持设置缩略图
2,加载的图片路径多种:网络本地资源assets等
3,缓存特点:跳过内存缓存,缓存动态清理,设置缓存策略
4,其他特点:生命周期集成,设置动态转换,设置下载优先级

三:磁盘缓存策略

Glide磁盘缓存策略分为四种,默认的是结果:

1.所有:缓存原图(SOURCE)和处理图(RESULT)
2.NONE:什么都不缓存
3.SOURCE:只缓存原图(SOURCE)
4.RESULT:只缓存处理图(RESULT) - 默认值
组合策略 和其他三级缓存一样,滑翔的缓存读取顺序是
内存(使用LRU算法) - >磁盘(使用弱引用缓存正在使用的资源) - >网络

四,优点与缺点:
优点:
1,使用简单,可配置度高,自适应程度高
2,多样化媒体加载:Glide不仅是一个图片缓存,支持常见的图片格式jpg png gif webp
3,生命周期集成:根据Activity/fragment生命周期自动管理请求
将Activity/Fragment作为with()参数的好处是:图片加载会和Activity/Fragment的生命周期保持一致,比如Paused状态在暂停加载,在Resumed的时候又自动重新加载
4,高效的缓存策略
(1)支持Memory和Disk图片缓存
(2)Picasso缓存的是全尺寸的,而Glide缓存的是跟ImageView尺寸相同的
(3)内存开销小,Glide加载的图片质量要差于Picasso,因为Glide默认的Bitmap格式是RGB_565 ,比ARGB_8888格式的内存开销要小一半。
(4)高效处理bitmap,使用bitmap pool使bitmap复用,主动调用recycle回收需要回收的bitmap,减少系统回收压力
5图片缓存->媒体缓存
6支持优先级处理
7支持 okhttp、Volley
缺点
(1)使用方法复杂
(2)由于Glide其功能强大,所以使用的方法非常多,其源码也相对的复杂
(3)包较大


Fresco 图片加载框架
一,简介:
Fresco是Facebook的最新推出的一款用于Android的应用中展示图片的强大图片库。

二,主要特点:
(1)两个内存缓存加上本地缓存构成了三级缓存
(2) 渐进式呈现图片
(3) 支持加载的Gif图和WebP的格式

三,主要功能:
带进度条的图片,图片的不同裁剪,圆形和圆角图片,渐进式展示图片,GIF动画图片,多图请求及图片复用,图片加载监听,图片缩放和旋转,修改图片和动态展示图片等功

四,优点与缺点:
优点: 
(1)内存自动回收。图片不可见时,会及时自动释放所占用的内存,尽可能地避免OOM 
(2)三级缓存机制。两级内存缓存(解码的与未解码的)+一级磁盘缓存,提升加载速度,节省内存占用空间 
(3)支持各种加载场景。如动图加载,高斯模糊等常见的图片加载场景。另外还提供了独特的渐进式加载,先加载小图再加载大图,加载进度等功能(很强大) 。
缺点: 
(1)框架较大,影响Apk体积 
(2)侵入性较强。须使用它提供的SimpleDraweeView来代替ImageView的加载显示图片

Picasso 图片加载框架

一,简介:
PicassoSquare公司出品的一个强大的图片下载和缓存图片库

二,Picasso特点和功能
1、 Picasso是全尺寸下载图片
2、Picasso默认的缓存格式为ARGB_888
3、链式调用,使用简单;
4、具有一般图片框架的基础功能;
5、方便的图片转换; (图片高斯模糊,添加圆角,做度灰处理,圆形图片)
6、加载过程监听和错误处理;
7、自动添加磁盘和内存二级缓存;
8、支持多种数据源加载。
9、Picasso默认不支持Gif图片加载。Picasso库很小,类也很少,库仅118KB大小。
10、Picasso支持调试和日志


三:Picasso缓存策略
1、缓存(Disk and Memory):Picasso有内存缓存(Memory)和磁盘缓存(Disk)
(1)LRU内存缓存为可用应用程序RAM的15%
(2)2%存储空间的磁盘缓存高达50MB但不低于5MB。
(3)三个用于磁盘和网络访问的下载线程。
2、Picasso内存缓存是使用的LRU策略的缓存实现:
memory(内存)-> disk(磁盘)-> network(网上)。
默认情况下,Picasso内存缓存和磁盘缓存都开启了的,
3、Picasso提供了设置缓存策略的方法。
1、memoryPolicy设置内存缓存策略
NO_CACHE:表示处理请求的时候跳过检查内存缓存
NO_STORE:表示请求成功之后,不会最终的结果存到内存。
2、networkPolicy设置磁盘缓存策略
NO_CACHE:表示处理请求的时候跳过处理磁盘缓存
NO_STORE:表示请求成功后,不会结果缓存到Disk,但是这个只对OkHttp有效 。OFFLINE:Picasso会强制这次请求从缓存中获取结果,不会发起网络请求,不管缓存中能否获取到结果。

四:Picasso解决了android中加载图片时需要解决的一些常见问题:
1、在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso已经解决了这个问题。
2、使用复杂的图片压缩转换来尽可能的减少内存消耗
3、自带内存和硬盘二级缓存功能

五:缺点:
不支持 GIF, 缓存的图片未缩放, 并且默认使用 ,使用ARGB_8888缓存图片, 缓存体积大.

六:Picasso和Glide 对比的优缺点
1.Picasso和Glide的withi后面的参数不同
(1)Picasso.with(这里只能传入上下文)     .
(2)Glide.with(可以传context,activity,fragment)
2.加载后图片质量不同(Picasso:ARGB-8888,Glide:RGB-565)
3.加载Gif图片(Picasso不能加载Gif图片,Glide可以加载Gif图片)
4.缓存策略和加载速度.
(1)Picasso缓存的是全尺寸,而 Glide的缓存的更ImageView的尺寸相同.
(2)调整ImageView大小,Picasso只缓存一个全尺寸,Glide则会为每种大小都缓存一次.


ImageLoader 图片加载框架
一:简介:
ImageLoader 是最早开源的 Android 图片缓存库, 强大的缓存机制, 早期使用这个图片加载框架的Android应用非常多。

二:特点和功能:
(1).使用多线程加载图片( 数据源可以是网络,本地,资源,assets
(2).灵活配置ImageLoader的基本参数,包括线程数、 图片下载器,内存缓存策略,硬盘缓存策略 、缓存方式、图片显示选项等;
(3).图片异步加载缓存机制,包括内存缓存及SDCard缓存;
(4).采用监听器监听图片加载过程及相应事件的处理;
(5).配置加载的图片显示选项,比如图片的圆角处理及渐变动画。
  1. 根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
  2. 提供在较慢的网络下对图片进行加载
三:缓存策略
Imageloader内存缓存策略
(1)只使用的是强引用缓存 
LruMemoryCache(默认的内存缓存类,缓存的是bitmap的强引用)
(2)使用强引用和弱引用相结合的缓存有
UsingFreqLimitedMemoryCache(缓存的图片总量超过限定值,删除使用频率最小的bitmap)
LRULimitedMemoryCache(使用的lru算法,和LruMemoryCache不同的是他缓存的是bitmap的弱引用)
FIFOLimitedMemoryCache(先进先出的缓存策略,当超过设定值,先删除最先加入缓存的bitmap)
LargestLimitedMemoryCache(当超过缓存限定值,先删除最大的bitmap对象)
LimitedAgeMemoryCache(当 bitmap加入缓存中的时间超过我们设定的值,将其删除)
(3)只使用弱引用缓存
WeakMemoryCache(缓存bitmap的总大小没有限制,不足就是不稳定,缓存的图片容易被回收)
Imageloader 硬盘缓存
FileCountLimitedDiscCache(设定缓存图片的个数,超过设定值,删除掉最先加入到硬盘的文件)
LimitedAgeDiscCache(设定文件存活的最长时间,当超过这个值,就删除该文件)
TotalSizeLimitedDiscCache(设定缓存bitmap的最大值,当超过这个值,删除最先加入到硬盘的文件)
UnlimitedDiscCache(这个缓存类没有任何的限制)

优点:
(1) 支持下载进度监听
(2) 可以在 View 滚动中暂停图片加载
通过 PauseOnScrollListener 接口可以在 View 滚动中暂停图片加载。
(3) 默认实现多种内存缓存算法 这几个图片缓存都可以配置缓存算法,不过 ImageLoader 默认实现了较多缓存算法,如 Size 最大先删除、使用最少先删除、最近最少使用、先进先删除、时间最长先删除等。
(4) 支持本地缓存文件名规则定义

缺点:
不支持GIF图片加载, 使用稍微繁琐, 并且缓存机制没有和http的缓
存很好的结合, 完全是自己的一套缓存机制(完整大小).

总结:最后放一张网络上找的图片


猜你喜欢

转载自blog.csdn.net/jie1123161402/article/details/80519099