天天看點

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緩存同時緩存全尺寸和改變尺寸兩種。