Fresco 與 Picasso 、Glide 的比較 轉

如今,市面上有各種各樣的圖片加載庫,選擇一個適合自己使用的圖片加載庫已經成爲了每一個 Android 開發者的必經之路,現在市面上知名的圖片加載庫有 Universal ImageLoader、Volley ImageLoader、Picasso、Glide 以及最近的 Fresco。他們各有千秋,不能評定誰比誰好,只能說哪一個更適合你。

比較Picasso、Glide 和 Fresco 三種圖片加載庫

比較 Picasso 與 Glide

總體來說二者極爲相似,有着近乎相同的 API 的使用風格,但 Glide 在緩存策略和加載 gif 方面略勝一籌。

基礎

Glide 和 Picasso 非常相似,Glide 加載圖片的方式和 Picasso 如出一轍。
雖然兩者看起來一樣,但 Glide 更易用,因爲 Glide 的 with 方法不光接受 Context,還接受 Activity 和 Fragment,Context 會自動的從他們獲取,同時將 Activity/Fragment 作爲 with()參數的好處是:圖片加載會和 Activity/Fragment 的生命週期保持一致,比如 Paused 狀態在暫停加載,在 Resumed 的時候又自動重新加載。

圖像和內存

同樣將 1920×1080 像素的圖片加載到 768×432 的 ImageView 中,Glide 加載的圖片質量要差於Picasso,這是因爲 Glide 默認的 Bitmap 格式是 RGB-565 ,比 ARGB-8888 格式的內存開銷要小一半。想要提高 Glide 的圖片效果,可以創建一個新的 GlideModule 將 Bitmap 格式轉換到 ARGB-8888。同時在 AndroidManifest.xml 中將 GlideModule 定義爲 meta-data。
修改了 Bitmap 格式後,Glide 將花費兩倍於上次的內存,但是仍遠遠小於 Picasso 的內存開銷,原因在於 Picasso 是加載了全尺寸的圖片到內存,然後讓 GPU 來實時重繪大小。而 Glide 加載的大小和 ImageView 的大小是一致的,當然,Picasso 也是可以指定加載圖片大小的,但是問題在於你需要主動計算 ImageView 的大小,或者說你的 ImageView 大小是具體的值(而不是 wrap_content )
在加載圖片這個問題上 Glide 完勝 Picasso,因爲 Glide 可以自動計算出任意情況下的 ImageView 大小。

Image質量的細節

將 ImageView 還原到真實大小時,Glide 加載的圖片沒有 Picasso 那麼平滑。

磁盤緩存

Picasso 和 Glide 在磁盤緩存策略上有很大的不同。Picasso 緩存的是全尺寸的,而 Glide 緩存的是跟 ImageView 尺寸相同的。我們可以將 ImageView 調整成不同大小,但不管大小如何 Picasso 只緩存一個全尺寸的。Glide 則不同,它會爲每種大小的 ImageView 緩存 一次。儘管一張圖片已經緩存了一次,但是假如你要在另外一個地方再次以不同尺寸顯示,需要重新下載,調整成新尺寸的大小,然後將這個尺寸的也緩存起來。具體說來就是:假如在第一個頁面有一個 200×200 的 ImageView,在第二個頁面有一個 100×100 的 ImageView,這兩個 ImageView 本來是要顯示同一張圖片,卻需要下載兩次。不過,你可以通過代碼改變這種行爲,讓Glide既緩存全尺寸又緩存其他尺寸,
這樣就使得下次在任何 ImageView 中加載圖片的時候,全尺寸的圖片將從緩存中取出,重新調整大小,然後緩存。
Glide 的這種方式優點是加載顯示非常快。而 Picasso 的方式則因爲需要在顯示之前重新調整大小而導致一些延遲。不過 Glide 比 Picasso 需要更大的空間來緩存。

特性

Glide 可以做到和 Picasso 幾乎一樣多的事,代碼也幾乎一樣。但 Glide 可以加載 GIF 動態圖,而 Picasso 不能,但是 Glide 動畫會消費太多的內存,因此謹慎使用。除了 gif 動畫之外,Glide 還可以將任何的本地視頻解碼成一張靜態圖片。還有一個特性是你可以配置圖片顯示的動畫,而 Picasso 只有一種動畫:fading in,最後一個是可以使用 thumbnail()產生一個你所加載圖片的 thumbnail。其實還有一些特性,不過不是非常重要,比如將圖像轉換成字節數組等。

總結

Glide 和 Picasso 都是非常完美的庫。Glide 加載圖像以及磁盤緩存的方式都要優於 Picasso,速度更快,並且 Glide 更有利於減少 OutOfMemoryError 的發生,GIF 動畫是 Glide 的殺手鐗。不過Picasso 的圖片質量更高。如果使用 Glide,建議將 Bitmap 格式換成 ARGB_8888、讓 Glide 緩存同時緩存全尺寸和改變尺寸兩種。

Fresco

內存管理

Fresco 的最大亮點在於它的內存管理。解壓後的圖片,即 Android 中的 Bitmap ,佔用大量的內存,在 Android 5.0以下系統中,這會顯著地引發界面卡頓。而使用 Fresco 將很好地解決這個問題,Fresco 會將圖片放到一個特別的內存區域,當圖片不再顯示的時候,佔用的內存會自動被釋放,這會使得 APP 更流暢,減少因圖片內存佔用而引發的 OOM。當 APP 包含的圖片較多時,這個效果尤其明顯。

圖像

Fresco 支持圖像的漸進式呈現,漸進式的圖片格式先呈現大致的圖片輪廓,然後隨着圖片下載的繼續,逐漸呈現清晰的圖片,這在低網速情況下瀏覽圖片十分有幫助,可以帶來更好地用戶體驗。另外,Fresco 支持加載 gif 圖,支持 WebP 格式。

最後總結

Picasso 所能實現的功能 Glide 都能做到,只是所需設置不同。兩者的區別是 Picasso 比 Glide 體積小很多且圖像質量比 Glide 高,但Glide 的速度比 Picasso 更快,Glide 的長處是處理大型的圖片流,如 gif、video,如果要製作視頻類應用,Glide 當爲首選。
Fresco 可以說是綜合了之前圖片加載庫的優點,其在5.0以下的內存優化非常好,但它的不足是體積太大,按體積進行比較:Fresco>Glide>Picasso,所以 Fresco 在圖片較多的應用中更能凸顯其價值,如果應用沒有太多圖片需求,不推薦使用 Fresco。

 

這裏還有一篇英文的參考:https://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章