简介
2014年Google I/O 官方正式发布的glide,作者是bumpetch,它和Picasso 有90%的相似度,主要是在细节的区别。Fresco是Facebook公司在2015年推出的一款强大的图片加载库
使用情况
| 名称 | star数 | fork数量 |
|---|---|---|
| Glide | 28.3k | 5.2k |
| Picasso | 17.3k | 4k |
| Fresco | 16.1k | 3.7k |
(ps:上图数据截止2020年2月下旬)glide目前使用时最广泛的
首页介绍glide 基本使用
基本使用
//添加依赖
repositories {
mavenCentral()
google()
}
dependencies {
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}
添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>
//使用
Glide.with(this)
.load(url)
.into(gImageView)
基本功能说明
1,支持异步加载
2,支持加载动画 Glide.with(this).load(url).animate(R.anim.xxx).into(imageView);
3,支持加载中和加载是吧图片设置placeholder(xxx)和error(xxx)方法
支持的图片格式
jpg,png,gif,webp
举个栗子
//设置图片圆角角度设置
val roundedCorners = RoundedCorners(10)
val options = RequestOptions.bitmapTransform(roundedCorners).override(300, 300)
Glide.with(this)
.load(url)
.apply(options)
.into(gImageView)
//gif 图片设置
Glide.with(this)
.asGif()
.load(gifUrl)
.into(fImageView)
//圆形图片设置
Glide.with(this)
.load(gifUrl)
.circleCrop()
.into(fImageView)

缓存
设置缓存参数
Glide.with(this).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);
缓存策略设置
DiskCacheStrategy.NONE //不缓存任何图片
DiskCacheStrategy.ALL //缓存原始图片(默认)
DiskCacheStrategy.SOURCE //只缓存原始图片
DiskCacheStrategy.RESULT //只缓存转换后的图片
清除缓存
Glide.get(this).clearDiskCache();//清理磁盘缓存 需要在子线程中执行
Glide.get(this).clearMemory();//清理内存缓存 可以在UI主线程中进行
跳过缓存设置
skipMemoryCache(true) //改方法将跳过内存缓存
Glide库优缺点
优点:
1, 除了基本图片格式png,jpg等,还支持gif,webp,甚至是video
2,高效的缓存策略
支持Disk 和Memory 缓存
像Picasso 只会缓存原始尺寸的图片,而 Glide 缓存的是多种规格,Glide 会根据你ImageView的大小来缓存相应大小尺寸的图片
3, Glide比Picasso加载的速度要快,Glide少了每次裁剪重新渲染的过程,加载速度当然要快一点
4,Glide内存开销小,Glide默认的Bitmap格式是RGB_565格式,而Picasso默认的是ARGB_8888 格式,内存开销要小一半
缺点:
1,使用方法复杂
由于Glide功能强大,所以使用的方法非常多,其源码也相对的复杂
2,源代码复杂,当然包就会大一点
Glide和Picasso对比
1,使用方式上,glide和Picasso 大差不差
Picasso
Picasso.with(context).load(xxx_url).into(xx_imaeView);
Glide
Glide.with(context).load(xxx_url).into(xx_imaeView);
不同的是:with()方法不光接收Context,还有activity,fragment,fragmentActivity
更值得注意的是: 传入的context类型对Glide加载图片的优化程度有影响 因为Glide可以监视Activity的生命周期,在Activity销毁的时候自动取消等待中的请求。但是如果传Application ,就失去了这种优化效果。
2,内存占用
Glide默认使用RGB_565格式的Bitmap
Picasso默认使用ARGB_8888格式的Bitmap;
我们都知道RGB_565比ARGB_8888格式的占用内存小一半
3,图片格式支持
除了png,jpeg,jpg常用的外,Glide支持webp,gif、Picasso不支持
4,缓存策略
Picasso和Glide在磁盘缓存策略上有很大的不同。
Picasso缓存的是全尺寸的,而Glide缓存的是跟ImageView尺寸相同的
5,加载时间
第一次加载时,Picasso 会比 Glide 快一点。 原因是缓存机制导致,因为Picasso 是直接把图加载到内存中, 而 Glide 则需要改变图片大小再加载到内存中去。这个应该是会耗费一定的时间。
但是,当加载图片从内存中的时候,Glide 则比 Picasso要快。 因为也是因为缓存机制导致的。 因为Picasso 从缓存中拿到的图片,还要先去 resize 后,然后设定给 imageView,而 Glide 是直接从缓存好的大小中直接取出。
6,库打大小
Picasso (v2.7.+)的大小:大约120kb+
Glide (v4.9.0+)的大小:大约500kb+,
6,其他
Glide 提供了非常多的配置,你可以非常灵活的根据你的需求来客制化。
Picasso 提供的可配置相对就少了很多
Glide和Fresco对比
1,使用方式上
Glide
Glide.with(context).load(xxx_url).into(xx_imaeView);
Fresco
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/imageView"
android:layout_width="120dp"
android:layout_height="120dp"
fresco:placeholderImage="@drawable/my_drawable"
/>
Uri uri = Uri.parse("xxx");
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.imageView);
draweeView.setImageURI(uri);
很显然Glide使用更简洁一点
2,内存占用
加载图片时面,Fresco和Glide大部分差不多,Fresco会稍微多一点点,不过可以忽略不计
但是在加载animations时,Glide会比Fresco占用的内存大 Glide的java heap基本为Fresco的一倍,所以OOM的风险Glide会比Fresco大一倍
3,图片格式支持
除了png,jpeg,jpg常用的外,Glide和Fresco都支持webp,gif
4,缓存
Glide: 内存和磁盘缓存
Fresco:三级缓存,分别是 Bitmap缓存,未解码图片缓存, 文件缓存
5,缓存策略
Glide 根据ImageView控件尺寸获得对应的大小的bitmap来展示
Fresco缓存的是也是全尺寸的
6,加载时间
Glide和Fresco 加载时间差不多
7,加载策略
Glide只有占位图
Fresco先加载小尺寸图片,再加载大尺寸的
8,库打大小
Glide (v4.9.0+)的大小:大约500kb+,
Fresco(2.1+)的大小:大约2~3M
9,加载进度
Glide 没有进度
Fresco 有加载进度
总结
1,Fresco很强大,但是包很大,依赖很多,使用复杂,要命的是还要在布局使用SimpleDraweeView控件加载图片
2,Glide 非常简约,使用简单,配置方便,而且从加载速度和性能方面和Fresco差不多,支持生命周期集成(可以根据Activity或者Fragment的生命周期管理图片加载请求)
3,Picasso 包小,使用方面和Glide差不多,但是灵活性没有Glide好,而且配置参数要少一些,使用场景来说,要略逊于Glide