Glide就是Picasso的克隆版本,但是细节上还是又不少区别的
Picasso和Glide各有所长 根据自己的需要选择合适的。
对我而言 我更喜欢Glide 因为它比Picasso快,虽然需要更大的缓存空间来缓存。
Glide和Picasso几乎可以做一样多的事情,代码也差不多一样。
区别:
1.Glide导入依赖需要使用Support Library V4包
2.Glide和Picasso的简单加载图片的使用方法都一样
但是Glide更易用,因为Glide的with方法不光接收Context
还接受Activity和Fragment,Context会自动的从他们获取。
Picasso只能传递Context参数。
将Activity和Fragment作为with()参数的好处是:
图片加载会和Activity和Fragment的生命周期保持一致,比如
在Paused状态暂停加载,在Resumed的时候又自动重新加载。所以
我建议传参的时候传递Activity和Fragment给Glide,而不是Context。
使用方法:
Picasso:
Picasso.with(context).load("图片地址").into(图片控件);
Glide:
Glide.with(context).load("图片地址").into(图片控件);
3.默认Bitmap格式
Glide是RGB_565
Picasso是ARGB_8888
Glide加载的图片比Picasso加载的图片质量要差 Picasso的开销内存远大于Glide。
因为Glide默认的Bitmap格式是RGB_565比Picasso的Bitmap格式ARGB_8888
的内存开销要小一半
如果你对Glide的默认Bitmap格式的RGB_565效果还比较满意,可以不做任何更改
但是如果你觉的难以接受,可以创建一个新的GlideModule将Bitmap格式转ARGB_8888
使用方法:
public class GlideUtils implements GlideModule{
@Override
public void applyOptions(Context context,GlideBuilder builder){
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
}
@Override
public void registerComponents(Context context,Glide glide){
}
}
同时在AndroidManifest.xml中将GildeModule定义为meta_data
<meta_data android:name="com.inthecheesefactory.lab.gildepicasso.GlideConfiguration"
android:value="GlideModule"/>
4.加载指定的图片的大小
Picasso需要主动的计算出ImageView的具体大小
Glide可以计算出任意情况下的ImageView的大小
这方面Glide完胜Picasso
Picasso也可以指定加载图片的大小
使用方法:
Picass.with(this)
.load("图片地址")
.resize(500,500)
.into(图片控件);
5.Glide加载的图片没有Picasso加载的图片平滑。
6.磁盘缓存
Picasso加载的图片是全尺寸的
Glide加载的图片是和ImageView控件尺寸相同的
尝试着将ImageView调整成不同大小,但不管大小如何Picasso缓存一个全尺寸的。
Glide则不同,他会为每种大小的ImageView都缓存一次,尽管图片已经缓存了一次
但是假如你要在另外一个地方再次以不同尺寸显示,需要重新下载,调整成新的
尺寸大小,然后将这个尺寸的也缓存起来。
比如说:你的布局上面有两个ImageView控件,他们的尺寸大小不一样,但是要
加载同一张图片,就会下载两次图片。
不过,你也能改变这样的行为。
让Glide既缓存全尺寸又缓存其他尺寸。
使用方法:
Glide.with(this)
.load("图片地址")
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(图片控件);
在ImageView控件中加载图片的时候,全尺寸的图片从缓存中取出,重新调整大小,然后缓存。优点:加载图片显示非常快,而Picasso因为在显示之前需要重新调整大小而导致一些延迟,即便用一下代码让它立即显示,也比Glide慢一步。
使用方法:
.noFade();
重点来了.............
Glide可以做到Picasso做不到的
1.Glide可以加载GIF动态图片 Picasso不能
因为Glide加载的图片和Activity/Fragment的生命周期是一致的,因此GIF的动画也会自
动随着Activity/Fragment的状态暂停、重放。Glide的缓存在GIF这里也是一样,调整大小
然后缓存。
缺点:Glide加载GIF动态图片会消费太多的内存,谨慎使用。
2.Glide可以将任何的本地视频解码成一张静态图片。
3.还有一个特性是你可以配置图片显示的动画,而Picasso只有一种动画:fading in。
最后一个是可以使用thumbnail()产生一个你所加载图片的thumbnail。
其实还有一些特性,不过不是非常重要,比如将图像转换成字节数组等。
配置
有许多可以配置的选项,比如大小,缓存的磁盘位置,最大缓存空间,位图格式等等。可以在这个页面查看这些配置 Configuration。
库的大小:
Glide库的大小比Picasso要大。
方法:
Glide和Picasso的方法个数分别是2678和840个。
建议使用Glide的时候开启ProGuard。
总结:
Glide和Picasso都是完美的库。Glide加载图片以及磁盘缓存的方式都要比Picasso要好,速度更快,而且Glide更利于减少OOM的发生,GIF动画是Glide的杀手锏。不过Picasso加载的图片质量比Glide更高。
建议使用Glide,但是将Bitmap格式转换成ARGB_8888、让Glide缓存同时缓存全尺寸和改变尺寸两种。
有所长 根据自己的需要选择合适的 。对我而言 我更喜欢Glide 因为它比Picasso快,虽然需要更大的缓存空间来缓存。
Glide和Picasso几乎可以做一样多的事情,代码也差不多一样。
区别:
1.Glide导入依赖需要使用Support Library v4包
2.Glide和Picasso的简单加载图片的使用方法如出一辙
但是Glide更易用,因为Glide的with方法不光接收Context
还接受Activity和Fragment,Context会自动的从他们获取。
Picasso只能传递Context参数。
将Activity和Fragment作为with()参数的好处是:
图片加载会和Activity和Fragment的生命周期保持一致,比如
在Paused状态暂停加载,在Resumed的时候又自动重新加载。所以
我建议传参的时候传递Activity和Fragment给Glide,而不是Context。
使用方法:
Picasso:
Picasso.with(context).load("图片地址").into(图片控件);
Glide:
Glide.with(context).load("图片地址").into(图片控件);
3.默认Bitmap格式
Glide是RGB_565
Picasso是ARGB_8888
Glide加载的图片比Picasso加载的图片质量要差 Picasso的开销内存远大于Glide。
因为Glide默认的Bitmap格式是RGB_565比Picasso的Bitmap格式ARGB_8888
的内存开销要小一半
如果你对Glide的默认Bitmap格式的RGB_565效果还比较满意,可以不做任何更改
但是如果你觉的难以接受,可以创建一个新的GlideModule将Bitmap格式转ARGB_8888
使用方法:
public class GlideUtils implements GlideModule{
@Override
public void applyOptions(Context context,GlideBuilder builder){
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
}
@Override
public void registerComponents(Context context,Glide glide){
}
}
同时在AndroidManifest.xml中将GildeModule定义为meta_data
<meta_data android:name="com.inthecheesefactory.lab.gildepicasso.GlideConfiguration"
android:value="GlideModule"/>
4.加载指定的图片的大小
Picasso需要主动的计算出ImageView的具体大小
Glide可以计算出任意情况下的ImageView的大小
这方面Glide完胜Picasso
Picasso也可以指定加载图片的大小
使用方法:
Picass.with(this)
.load("图片地址")
.resize(500,500)
.into(图片控件);
5.Glide加载的图片没有Picasso加载的图片平滑。
6.磁盘缓存
Picasso加载的图片是全尺寸的
Glide加载的图片是和ImageView控件尺寸相同的
尝试着将ImageView调整成不同大小,但不管大小如何Picasso缓存一个全尺寸的。
Glide则不同,他会为每种大小的ImageView都缓存一次,尽管图片已经缓存了一次
但是假如你要在另外一个地方再次以不同尺寸显示,需要重新下载,调整成新的
尺寸大小,然后将这个尺寸的也缓存起来。
比如说:你的布局上面有两个ImageView控件,他们的尺寸大小不一样,但是要
加载同一张图片,就会下载两次图片。
不过,你也能改变这样的行为。
让Glide既缓存全尺寸又缓存其他尺寸。
使用方法:
Glide.with(this)
.load("图片地址")
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(图片控件);
在ImageView控件中加载图片的时候,全尺寸的图片从缓存中取出,重新调整大小,然后缓存。优点:加载图片显示非常快,而Picasso因为在显示之前需要重新调整大小而导致一些延迟,即便用一下代码让它立即显示,也比Glide慢一步。
使用方法:
.noFade();
重点来了.............
Glide可以做到Picasso做不到的
1.Glide可以加载GIF动态图片 Picasso不能
因为Glide加载的图片和Activity/Fragment的生命周期是一致的,因此GIF的动画也会自
动随着Activity/Fragment的状态暂停、重放。Glide的缓存在GIF这里也是一样,调整大小
然后缓存。
缺点:Glide加载GIF动态图片会消费太多的内存,谨慎使用。
2.Glide可以将任何的本地视频解码成一张静态图片。
3.还有一个特性是你可以配置图片显示的动画,而Picasso只有一种动画:fading in。
最后一个是可以使用thumbnail()产生一个你所加载图片的thumbnail。
其实还有一些特性,不过不是非常重要,比如将图像转换成字节数组等。
配置
有许多可以配置的选项,比如大小,缓存的磁盘位置,最大缓存空间,位图格式等等。可以在这个页面查看这些配置 Configuration。
库的大小:
Glide库的大小比Picasso要大。
方法:
Glide和Picasso的方法个数分别是2678和840个。
建议使用Glide的时候开启ProGuard。
总结:
Glide和Picasso都是完美的库。Glide加载图片以及磁盘缓存的方式都要比Picasso要好,速度更快,而且Glide更利于减少OOM的发生,GIF动画是Glide的杀手锏。不过Picasso加载的图片质量比Glide更高。
建议使用Glide,但是将Bitmap格式转换成ARGB_8888、让Glide缓存同时缓存全尺寸和改变尺寸两种。