天天看点

Glide和Picasso的区别

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缓存同时缓存全尺寸和改变尺寸两种。