這樣看起來就會好很多。
我們再來看看記憶體開銷圖,這次貌似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快取同時快取全尺寸和改變尺寸兩種。
相關資源
Glide和Picasso的對比
下面是picasso和glide影象比較的結果。1920 x1080畫素影象載入到768 x432畫素imageview 我們再來看看記憶體開銷圖,這次貌似glide花費了兩倍於上次的記憶體,但是picasso的記憶體開銷仍然遠大於glide。原因在於picasso是載入了全尺寸的到記憶體,然後讓g...
深入對比Glide 和 Picasso
glide 和 picasso 可以說是目前 android 上最流行的載入庫了。大部分安卓應用開發人員都有使用過這兩個庫在他們的開發工作中。這兩個庫也都確實提供了大量載入的功能,而且也都經過了很多應用的檢驗,是可靠可信的。表面看上去似乎兩者工作原理很相似,但是實際上是有著很大差別的,主要體現在下面...
整理Glide和Picasso的區別
picasso的記憶體開銷遠大於glide 原因是picasso是載入了全尺寸的到記憶體,讓gpu來實時重繪大小,而glide載入的大小和imageview的大小是一致的,因此更小 picasso也可以指定載入的大小的 picasso.with this load resize 768,432 in...