Glide和Picasso的對比

2021-07-25 07:01:58 字數 3903 閱讀 7642

下面是picasso和glide影象比較的結果。(1920 x1080畫素影象載入到768 x432畫素imageview)

我們再來看看記憶體開銷圖,這次貌似glide花費了兩倍於上次的記憶體,但是picasso的記憶體開銷仍然遠大於glide。 

原因在於picasso是載入了全尺寸的到記憶體,然後讓gpu來實時重繪大小。而glide載入的大小和imageview的大小是一致的,因此更小。當然,picasso也可以指定載入的大小的:

picasso.with(this) 

.load(「

.resize(768, 432)

.into(ivimgpicasso);

但是問題在於你需要主動計算imageview的大小,或者說你的imageview大小是具體的值(而不是wrap_content),你也可以這樣:

picasso.with(this) 

.load(「

.fit()

.centercrop()

.into(ivimgpicasso);

現在picasso的記憶體開銷就和glide差不多了。 

雖然記憶體開銷差距不到,但是在這個問題上glide完勝picasso。因為glide可以自動計算出任意情況下的imageview大小。

image質量的細節

這是將imageview還原到真實大小時的比較。

你可以看到,glide載入的沒有picasso那麼平滑,我還沒有找到乙個可以直觀改變大小調整演算法的方法。

但是這並不算什麼壞事,因為很難察覺。

磁碟快取

picasso和glide在磁碟快取策略上有很大的不同。picasso快取的是全尺寸的,而glide快取的是跟imageview尺寸相同的。

上面提到的平滑度的問題依然存在,而且如果載入的是rgb565,那麼快取中的也是rgb565。

不過,你可以改變這種行為,讓glide既快取全尺寸又快取其他尺寸:

glide.with(this) 

.load(「

.diskcachestrategy(diskcachestrategy.all)

.into(ivimgglide);

下次在任何imageview中載入的時候,全尺寸的將從快取中取出,重新調整大小,然後快取。

glide的這種方式優點是載入顯示非常快。而picasso的方式則因為需要在顯示之前重新調整大小而導致一些延遲,即便你新增了這段**來讓其立即顯示:

picasso和glide各有所長,你根據自己的需求選擇合適的。

對我而言,我更喜歡glide,因為它遠比picasso快,雖然需要更大的空間來快取。

特性

你可以做到幾乎和picasso一樣多的事情,**也幾乎一樣。

image resizing

// picasso 

.resize(300, 200);

// glide

.override(300, 200);

center cropping

// picasso 

.centercrop();

// glide

.centercrop();

transforming

// picasso 

.transform(new circletransform())

// glide

.transform(new circletransform(context))

設定佔位圖或者載入錯誤圖:

// picasso 

.placeholder(r.drawable.placeholder)

.error(r.drawable.imagenotfound)

// glide

.placeholder(r.drawable.placeholder)

.error(r.drawable.imagenotfound)

幾乎和picasso一樣,從picasso轉換到glide對你來說就是小菜一碟。

有什麼glide可以做而picasso做不到

glide可以加在gif動態圖,而picasso不能。

同時因為glide和activity/fragment的生命週期是一致的,因此gif的動畫也會自動的隨著activity/fragment的狀態暫停、重放。glide 的快取在gif這裡也是一樣,調整大小然後快取。

但是從我的一次測試結果來看glide 動畫會消費太多的記憶體,因此謹慎使用。

最後乙個是可以使用thumbnail()產生乙個你所載入的thumbnail。

其實還有一些特性,不過不是非常重要,比如將影象轉換成位元組陣列等。

配置

有許多可以配置的選項,比如大小,快取的磁碟位置,最大快取空間,位圖格式等等。可以在這個頁面檢視這些配置 configuration。

庫的大小

picasso (v2.5.1)的大小約118kb,而glide (v3.5.2)的大小約430kb。

不過312kb的差距並不是很重要。

picasso和glide的方法個數分別是840和2678個。

必須指出,對於dex檔案65535個方法的限制來說,2678是乙個相當大的數字了。建議在使用glide的時候開啟proguard。

總結

glide和picasso都是非常完美的庫。glide載入影象以及磁碟快取的方式都要優於picasso,速度更快,並且glide更有利於減少outofmemoryerror的發生,gif動畫是glide的殺手鐗。不過picasso的質量更高。你更喜歡哪個呢?

雖然我使用了很長事件的picasso,但是我得承認現在我更喜歡glide。我的建議是使用glide,但是將bitmap格式換成 argb_8888、讓glide快取同時快取全尺寸和改變尺寸兩種。

相關資源

Picasso和Glide的區別

這樣看起來就會好很多。我們再來看看記憶體開銷圖,這次貌似glide花費了兩倍於上次的記憶體,但是picasso的記憶體開銷仍然遠大於glide。原因在於picasso是載入了全尺寸的到記憶體,然後讓gpu來實時重繪大小。而glide載入的大小和imageview的大小是一致的,因此更小。當然,pic...

深入對比Glide 和 Picasso

glide 和 picasso 可以說是目前 android 上最流行的載入庫了。大部分安卓應用開發人員都有使用過這兩個庫在他們的開發工作中。這兩個庫也都確實提供了大量載入的功能,而且也都經過了很多應用的檢驗,是可靠可信的。表面看上去似乎兩者工作原理很相似,但是實際上是有著很大差別的,主要體現在下面...

整理Glide和Picasso的區別

picasso的記憶體開銷遠大於glide 原因是picasso是載入了全尺寸的到記憶體,讓gpu來實時重繪大小,而glide載入的大小和imageview的大小是一致的,因此更小 picasso也可以指定載入的大小的 picasso.with this load resize 768,432 in...