Fresco,Glide,Picasso對(duì)比分析

前言:本文就Fresco、Glide和Picasso三種較主流的圖片加載庫(kù)作比較說(shuō)明。

首先,比較 Picasso 與 Glide

總的來(lái)說(shuō)二者極為相似,有著近乎相同的 API 風(fēng)格,但 Glide 在緩存策略和加載 gif 方面略勝一籌。這里是關(guān)于Picasso 與 Glide的詳細(xì)分析。

1.兩者使用方式類(lèi)似,但Glide的with()接受的不僅僅是Context,還可以是Activity或是Fragment,Context會(huì)自動(dòng)的從他們獲取。同時(shí)將Activity/Fragment作為with()參數(shù)的好處是:圖片加載會(huì)和Activity/Fragment的生命周期保持一致,比如Paused狀態(tài)在暫停加載,在Resumed的時(shí)候又自動(dòng)重新加載。所以我建議傳參的時(shí)候傳遞Activity 和 Fragment給Glide,而不是Context。

2.Glide加載的圖片質(zhì)量要略差于Picasso,這又是為什么呢?這是因?yàn)?b>Glide默認(rèn)的Bitmap格式是RGB_565,比ARGB_8888格式的內(nèi)存開(kāi)銷(xiāo)要小一半。Glide當(dāng)然也可以通過(guò)GlideModule設(shè)置格式。



3.兩者在磁盤(pán)緩存策略上有很大的不同。Picasso緩存的是全尺寸的,而Glide緩存的是跟ImageView尺寸相同的。Glide的這種方式優(yōu)點(diǎn)是加載顯示非???/b>。而Picasso的方式則因?yàn)樾枰陲@示之前重新調(diào)整大小而導(dǎo)致一些延遲。


4.Glide可以加載GIF動(dòng)態(tài)圖,而Picasso不能。

5.Picasso (v2.5.1)大小約為118KB,然而Glide (v3.5.2)的大小約為430KB。Picasso的方法數(shù)大約480,然而Glide的方法數(shù)約2678。

其次,就是Fresco

Fresco 中設(shè)計(jì)有一個(gè)叫做Image Pipeline的模塊。它負(fù)責(zé)從網(wǎng)絡(luò),從本地文件系統(tǒng),本地資源加載圖片。為了最大限度節(jié)省空間和CPU時(shí)間,它含有3級(jí)緩存設(shè)計(jì)(2級(jí)內(nèi)存,1級(jí)磁盤(pán))。

Fresco中設(shè)計(jì)有一個(gè)叫做Drawees模塊,它會(huì)在圖片加載完成前顯示占位圖,加載成功后自動(dòng)替換為目標(biāo)圖片。當(dāng)圖片不再顯示在屏幕上時(shí),它會(huì)及時(shí)地釋放內(nèi)存和空間占用。

Fresco 特性: 這里是秋百萬(wàn)(廖祜秋)譯作

·內(nèi)存管理

解壓后的圖片,即Android中的Bitmap,占用大量的內(nèi)存。大的內(nèi)存占用勢(shì)必引發(fā)更加頻繁的GC。在5.0以下,GC將會(huì)顯著地引發(fā)界面卡頓。

在5.0以下系統(tǒng),F(xiàn)resco將圖片放到一個(gè)特別的內(nèi)存區(qū)域。當(dāng)然,在圖片不顯示的時(shí)候,占用的內(nèi)存會(huì)自動(dòng)被釋放。這會(huì)使得APP更加流暢,減少因圖片內(nèi)存占用而引發(fā)的OOM。

Fresco 在低端機(jī)器上表現(xiàn)一樣出色,你再也不用因圖片內(nèi)存占用而思前想后。

·圖片繪制

Fresco 的 Drawees 設(shè)計(jì),帶來(lái)一些有用的特性:

1.自定義居中焦點(diǎn)

2.圓角圖,當(dāng)然圓圈也行

3.下載失敗之后,點(diǎn)擊重現(xiàn)下載

4.自定義占位圖,自定義overlay, 或者進(jìn)度條

5.指定用戶按壓時(shí)的overlay

·圖片加載

Fresco的Image Pipeline允許你用很多種方式來(lái)自定義圖片加載過(guò)程,比如:

1.為同一個(gè)圖片指定不同的遠(yuǎn)程路徑,或者使用已經(jīng)存在本地緩存中的圖片

2.先顯示一個(gè)低清晰度的圖片,等高清圖下載完之后再顯示高清圖

3.加載完成回調(diào)通知

4.對(duì)于本地圖,如有EXIF縮略圖,在大圖加載完成之前,可先顯示縮略圖

5.縮放或者旋轉(zhuǎn)圖片

6.對(duì)已下載的圖片再次處理

7.支持WebP解碼,即使在早先對(duì)WebP支持不完善的Android系統(tǒng)上也能正常使用!

·動(dòng)圖加載

加載Gif圖和WebP動(dòng)圖在任何一個(gè)Android開(kāi)發(fā)者眼里看來(lái)都是一件非常頭疼的事情。每一幀都是一張很大的Bitmap,每一個(gè)動(dòng)畫(huà)都有很多幀。Fresco讓你沒(méi)有這些煩惱,它處理好每一幀并管理好你的內(nèi)存。

·圖片的漸進(jìn)式呈現(xiàn)

漸進(jìn)式的JPEG圖片格式已經(jīng)流行數(shù)年了,漸進(jìn)式圖片格式先呈現(xiàn)大致的圖片輪廓,然后隨著圖片下載的繼續(xù),呈現(xiàn)逐漸清晰的圖片,這對(duì)于移動(dòng)設(shè)備,尤其是慢網(wǎng)絡(luò)有極大的利好,可帶來(lái)更好的用戶體驗(yàn)。

說(shuō)了那么多總之Fresco就是吊!

最后,進(jìn)行總結(jié)一下

Picasso 所能實(shí)現(xiàn)的功能 Glide 都能做到,只是所需設(shè)置不同。兩者的區(qū)別是 Picasso 比 Glide 體積小很多且圖像質(zhì)量比 Glide 高,但Glide 的速度比 Picasso 更快,Glide 的長(zhǎng)處是處理大型的圖片流,如 gif、video,如果要制作視頻類(lèi)應(yīng)用,Glide 當(dāng)為首選。

Fresco 可以說(shuō)是綜合了之前圖片加載庫(kù)的優(yōu)點(diǎn),其在5.0以下的內(nèi)存優(yōu)化非常好,但它的不足是體積太大,按體積進(jìn)行比較:Fresco>Glide>Picasso,所以 Fresco 在圖片較多的應(yīng)用中更能凸顯其價(jià)值,如果應(yīng)用沒(méi)有太多圖片需求,還是不推薦使用 Fresco。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容