Glide和Picasso的區別
首先簡單的介紹下兩個庫的出身:
Picasso是Square公司出品的一款非常優秀的開源圖片加載庫
Glide是由Google開發,基於 Picasso,依然有保存了Picasso的簡潔風格,但是在此做了大量優化與改進。
具體的使用方法這里就不詳細介紹了,這里重點說區別,主要體現在下面幾個方面:
1. 庫的大小和方法的數量
Glide 要比 Picasso 大很多,基本上是 Picasso 的3.5倍
2. 緩存方式
Glide 默認的 Bitmap 格式是 RGB_565 格式,而Picasso默認的是 ARGB_8888 格式,這個內存開銷要小一半。
在磁盤緩存方面,Picasso只會緩存原始尺寸的圖片,而 Glide 緩存的是多種規格,也就意味着 Glide會根據你ImageView的大小來緩存相應大小的圖片尺寸,比如你ImageView大小是200*200,原圖是 400*400,而使用Glide 就會緩存 200*200規格的圖,而Picasso只會緩存 400*400 規格的。這個改進就會導致 Glide 比 Picasso 加載的速度要快
3. 加載圖片速度
當內存中不存在時,Picasso會比Glide快一點,可能的原因是緩存機制導致,因為Picasso是直接把圖加載到內存中,而Glid 則需要改變圖片大小再加載到內存中去,這個應該是會耗費一定的時間。
但是,當加載的圖片在內存中時,Glide 則比 Picasso 要快。其原理還是因為緩存機制的區別,因為Picasso 從內存中拿到的圖片,還要先去 resize 后,然后設定給 imageView,但是 Glide 則不需要這樣。
4. 生命周期
Glide 相比 Picasso 的一大優勢是它可以和 Activity 以及 Fragment 的生命周期相互協作,我們在調用 Glide.with() 函數時可以將 Activity 或者 Fragment 的實例傳進去,這樣 Glide 就會自動將圖片加載等操作和組件的生命周期關聯起來。
5. Glide可以加載視頻縮略圖
6. Glide 支持 GIF動態圖
Picasso:
是Square公司開源的項目,功能強大調用簡單:
-
//用法1:加載全尺寸的圖片到內存,然后讓GPU來實時重繪大小
-
Picasso.with(this) .load(“http://**.jpg“) .into(ivImgPicasso);
-
//用法2:需要去設置ImageView大小值
-
Picasso.with(this) .load(“http://**.jpg“) .resize(768, 432) .into(ivImgPicasso);
-
//用法3:按統一比例縮放圖片。與Glide加載圖片內存開銷差不多。
-
Picasso.with(this) .load(“http://**.jpg“) .fit() .centerCrop() .into(ivImgPicasso);
Glide:
glide是谷歌員工開源的一個項目。用法是:Glide.with(this).load("url 圖片文件 字節數組").into(imageView);
Glide與Picasso的對比:
1,內存:加載一張圖片Picasso的內存開銷要遠大於Glide。
2,Image質量細節:Glide默認的是Bitmap格式是RGB-565;Picasso默認ARGB_8888格式。因此Glide加載的圖片沒有Picasso那么平滑,但是很難察覺。
3,磁盤緩存:Picasso緩存的是全尺寸的。Glide會根據ImageView的大小緩存尺寸相同的。
讓Glide即緩存全尺寸的,有緩存其他大小的方式:
Glide.with(this) .load(“http://**.jpg“).diskCacheStrategy(DiskCacheStrategy.ALL) .into(ivImgGlide);
Glide的這種方式優點是加載顯示非常快。而Picasso的方式則因為需要在顯示之前重新調整大小而導致一些延遲,Glide比Picasso快,雖然需要更大的空間來緩存。
4,Glide可以加載git,Picasso不能。
總結:
(1)Glide比Picasso加載速度快,但Glide比Picasso需要更大的空間來緩存;
(2)Glide加載圖像及磁盤緩存的方式都優於Picasso,且Glide更有利於減少OutOfMemoryError的發生;
(3)Glide可以加載Gif動圖,Picasso不可以加載動圖
(4)Picasso加載的圖片比Glide加載的圖片平滑(可忽略不計)
(5)Picasso不支持視頻縮略圖,Glide支持。
Fresco:
Fresco是facebook開源的圖片庫。Glide有的功能Fresco都有(都可以加載縮略圖,可以加載gif)。
與glide對比:
在加載靜態圖片的時候三個圖片庫性能差不多,Glide要稍微優秀一點。在加載動態圖的時候(Picasso不支持gif)Glide的java heap是Fresco的一倍,所以OOM的風險比Fresco大很多。但是Fresco占用的native heap要比Glide占用的 native heap要大的多,接近10倍。所以Fresco存在一定的風險,因為他的native heap有些恐怖。
Glide優缺點:
1,多種圖片格式的緩存(原圖片緩存和其他格式),適用更多的內容表現形式(gif webp 縮略圖 video)。Fresco也是只緩存原圖片
2,加載速度快(因為緩存的圖片規格多),內存開銷小(rgb-565)
3,沒有文件緩存 java heap比Fresco高
Fresco優缺點:
1,最大的優勢在於5.0以下(最低2.3)的bitmap加載。5.0以下系統,Fresco將圖片放在一個特別的內存區域,大大減少OOM。
2,適用於高性能加載大量圖片。
3,使用比較麻煩,包大。