一,简介:
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是Facebook的最新推出的一款用于Android的应用中展示图片的强大图片库。
二,主要特点:
(1)两个内存缓存加上本地缓存构成了三级缓存
(2)
渐进式呈现图片
(3)
支持加载的Gif图和WebP的格式
三,主要功能:
带进度条的图片,图片的不同裁剪,圆形和圆角图片,渐进式展示图片,GIF动画图片,多图请求及图片复用,图片加载监听,图片缩放和旋转,修改图片和动态展示图片等功
四,优点与缺点:
优点:
(1)内存自动回收。图片不可见时,会及时自动释放所占用的内存,尽可能地避免OOM
(2)三级缓存机制。两级内存缓存(解码的与未解码的)+一级磁盘缓存,提升加载速度,节省内存占用空间
(3)支持各种加载场景。如动图加载,高斯模糊等常见的图片加载场景。另外还提供了独特的渐进式加载,先加载小图再加载大图,加载进度等功能(很强大) 。
缺点:
(1)框架较大,影响Apk体积
(2)侵入性较强。须使用它提供的SimpleDraweeView来代替ImageView的加载显示图片
Picasso
图片加载框架
一,简介:
Picasso是Square公司出品的一个强大的图片下载和缓存图片库
二,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).配置加载的图片显示选项,比如图片的圆角处理及渐变动画。
- 根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
- 提供在较慢的网络下对图片进行加载
三:缓存策略
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的缓
存很好的结合, 完全是自己的一套缓存机制(完整大小).
总结:最后放一张网络上找的图片