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