一、主流圖片框架:
Android-Universal-Image-Loader
Picasso
Glide
Fresco
具體圖片庫介紹參考對應(yīng)項目文檔。
Android-Universal-Image-Loader、Picasso不支持gif圖,且項目比較早,目前大部分app會優(yōu)先考慮使用功能更全面的Glide和Fresco。
二、圖片庫對比
| 對比項 | Glide | Fresco |
|---|---|---|
| 發(fā)布時間 | 2014年9月 | 2015年5月 |
| 是否支持gif | true | true |
| 是否支持webP | 支持靜圖,不支持動圖 | 都支持 |
| 視頻縮略圖 | true | true |
| 大小 | 500K | 2-3M |
| 加載速度 | 高 | 高 |
| 靜圖(max java heap) | 11.1MB | 13.9MB |
| 靜圖(max native heap) | 43.8MB | 43.8MB |
| 靜圖(avg wait time) | 34ms | 44ms |
| 動圖(max java heap) | 74.8.1MB | 36.1MB |
| 動圖(max native heap) | 66.8MB | 545.3MB |
| 動圖(avg wait time) | 33910ms | 15142ms |
| 緩存 | 內(nèi)存、磁盤 | 三級緩存,分別是 Bitmap緩存,未解碼圖片緩存, 文件緩存。 |
| 加載進(jìn)度 | false | true |
數(shù)據(jù)參考:https://cloud.tencent.com/developer/article/1385853
整體對比來看,需要考慮的區(qū)別有:
1.webP動圖支持:
本地webP的動圖和靜圖Glide加載都沒問題,但是外鏈的webP動圖,Glide加載不了。
Glide(最新4.11.0版本): 不支持加載外鏈的webP動圖,但是可以參考Fresco寫個webpsupport,現(xiàn)在也有類似的三方庫,比如:https://github.com/zjupure/GlideWebpDecoder。自測發(fā)現(xiàn)確實(shí)可以做到。
Fresco本身有webpsupport支持。
這點(diǎn)上來說,兩種已經(jīng)沒有太多差異。
2.內(nèi)存:
動圖,max java heap:Glide開銷比Fresco大不少。max native heap: Fresco碾壓了Glide。java heap確實(shí)Fresco開銷小點(diǎn),不容易造成oom,但是native heap太高了,雖然native heap不受虛擬機(jī)約束,但是對設(shè)備整體內(nèi)存是有壓力的,尤其是像盒子這樣的設(shè)備,內(nèi)存也就是1G,小的512M。
Fresco核心功能下沉到了native實(shí)現(xiàn)的,因此native heap開銷,java heap開銷小,但是如果native heap開銷如上表數(shù)據(jù)所示的話,那確實(shí)也太大了點(diǎn),從內(nèi)存這點(diǎn)上看,我認(rèn)為Glide至少不會比Fresco差。
3.包大?。?/strong>
Glide比Fresco更輕量級。Glide能省2M左右的包大小,這個也比較關(guān)鍵。
目前沒發(fā)現(xiàn)必須Glide切到Fresco的理由,當(dāng)然也有可能有些點(diǎn)是我沒調(diào)研到的,歡迎討論。另外切換成本也比較高,F(xiàn)resco是基于自定義控件SimpleDraweeView做的,而Glide是基于ImageView,所以改動也會比較大。