前言:本文就Fresco踱侣、Glide和Picasso三種較主流的圖片加載庫作比較說明粪小。
首先,比較 Picasso 與 Glide
總的來說二者極為相似抡句,有著近乎相同的 API 風(fēng)格探膊,但 Glide 在緩存策略和加載 gif 方面略勝一籌。這里是關(guān)于Picasso 與 Glide的詳細(xì)分析待榔。
1.兩者使用方式類似逞壁,但Glide的with()接受的不僅僅是Context,還可以是Activity或是Fragment锐锣,Context會自動的從他們獲取猾担。同時將Activity/Fragment作為with()參數(shù)的好處是:圖片加載會和Activity/Fragment的生命周期保持一致,比如Paused狀態(tài)在暫停加載刺下,在Resumed的時候又自動重新加載绑嘹。所以我建議傳參的時候傳遞Activity 和 Fragment給Glide,而不是Context橘茉。
2.Glide加載的圖片質(zhì)量要略差于Picasso工腋,這又是為什么呢?這是因為Glide默認(rèn)的Bitmap格式是RGB_565畅卓,比ARGB_8888格式的內(nèi)存開銷要小一半擅腰。Glide當(dāng)然也可以通過GlideModule設(shè)置格式。
3.兩者在磁盤緩存策略上有很大的不同翁潘。Picasso緩存的是全尺寸的趁冈,而Glide緩存的是跟ImageView尺寸相同的。Glide的這種方式優(yōu)點是加載顯示非嘲萋恚快渗勘。而Picasso的方式則因為需要在顯示之前重新調(diào)整大小而導(dǎo)致一些延遲。
4.Glide可以加載GIF動態(tài)圖俩莽,而Picasso不能旺坠。
5.Picasso (v2.5.1)大小約為118KB,然而Glide (v3.5.2)的大小約為430KB扮超。Picasso的方法數(shù)大約480取刃,然而Glide的方法數(shù)約2678。
其次出刷,就是Fresco
Fresco 中設(shè)計有一個叫做Image Pipeline的模塊璧疗。它負(fù)責(zé)從網(wǎng)絡(luò),從本地文件系統(tǒng)馁龟,本地資源加載圖片崩侠。為了最大限度節(jié)省空間和CPU時間,它含有3級緩存設(shè)計(2級內(nèi)存屁柏,1級磁盤)啦膜。
Fresco中設(shè)計有一個叫做Drawees模塊有送,它會在圖片加載完成前顯示占位圖,加載成功后自動替換為目標(biāo)圖片僧家。當(dāng)圖片不再顯示在屏幕上時雀摘,它會及時地釋放內(nèi)存和空間占用。
Fresco 特性: 這里是秋百萬(廖祜秋)譯作
·內(nèi)存管理
解壓后的圖片八拱,即Android中的Bitmap阵赠,占用大量的內(nèi)存。大的內(nèi)存占用勢必引發(fā)更加頻繁的GC肌稻。在5.0以下清蚀,GC將會顯著地引發(fā)界面卡頓。
在5.0以下系統(tǒng)爹谭,F(xiàn)resco將圖片放到一個特別的內(nèi)存區(qū)域枷邪。當(dāng)然,在圖片不顯示的時候诺凡,占用的內(nèi)存會自動被釋放东揣。這會使得APP更加流暢,減少因圖片內(nèi)存占用而引發(fā)的OOM腹泌。
Fresco 在低端機(jī)器上表現(xiàn)一樣出色嘶卧,你再也不用因圖片內(nèi)存占用而思前想后。
·圖片繪制
Fresco 的 Drawees 設(shè)計凉袱,帶來一些有用的特性:
1.自定義居中焦點
2.圓角圖芥吟,當(dāng)然圓圈也行
3.下載失敗之后,點擊重現(xiàn)下載
4.自定義占位圖专甩,自定義overlay, 或者進(jìn)度條
5.指定用戶按壓時的overlay
·圖片加載
Fresco的Image Pipeline允許你用很多種方式來自定義圖片加載過程钟鸵,比如:
1.為同一個圖片指定不同的遠(yuǎn)程路徑,或者使用已經(jīng)存在本地緩存中的圖片
2.先顯示一個低清晰度的圖片配深,等高清圖下載完之后再顯示高清圖
3.加載完成回調(diào)通知
4.對于本地圖携添,如有EXIF縮略圖,在大圖加載完成之前篓叶,可先顯示縮略圖
5.縮放或者旋轉(zhuǎn)圖片
6.對已下載的圖片再次處理
7.支持WebP解碼,即使在早先對WebP支持不完善的Android系統(tǒng)上也能正常使用羞秤!
·動圖加載
加載Gif圖和WebP動圖在任何一個Android開發(fā)者眼里看來都是一件非常頭疼的事情缸托。每一幀都是一張很大的Bitmap,每一個動畫都有很多幀瘾蛋。Fresco讓你沒有這些煩惱俐镐,它處理好每一幀并管理好你的內(nèi)存。
·圖片的漸進(jìn)式呈現(xiàn)
漸進(jìn)式的JPEG圖片格式已經(jīng)流行數(shù)年了哺哼,漸進(jìn)式圖片格式先呈現(xiàn)大致的圖片輪廓佩抹,然后隨著圖片下載的繼續(xù)叼风,呈現(xiàn)逐漸清晰的圖片,這對于移動設(shè)備棍苹,尤其是慢網(wǎng)絡(luò)有極大的利好无宿,可帶來更好的用戶體驗。
說了那么多總之Fresco就是吊枢里!
最后孽鸡,進(jìn)行總結(jié)一下
Picasso 所能實現(xiàn)的功能 Glide 都能做到,只是所需設(shè)置不同栏豺。兩者的區(qū)別是 Picasso 比 Glide 體積小很多且圖像質(zhì)量比 Glide 高彬碱,但Glide 的速度比 Picasso 更快,Glide 的長處是處理大型的圖片流奥洼,如 gif巷疼、video,如果要制作視頻類應(yīng)用灵奖,Glide 當(dāng)為首選嚼沿。
Fresco 可以說是綜合了之前圖片加載庫的優(yōu)點,其在5.0以下的內(nèi)存優(yōu)化非常好桑寨,但它的不足是體積太大伏尼,按體積進(jìn)行比較:Fresco>Glide>Picasso,所以 Fresco 在圖片較多的應(yīng)用中更能凸顯其價值尉尾,如果應(yīng)用沒有太多圖片需求爆阶,還是不推薦使用 Fresco。