們先來看下BitmapFun,BitmapFun函數庫是Android官方教程中的一個圖片加載和緩存實例,對於簡單的圖片加載需求來講,使用BitmapFun就夠了。git
它的原理很簡單,符合如今流行的圖片加載和緩存方案。在獲取圖片時首先從內存緩存中查找,如未找到圖片對象,則到本地sdCard卡上查找,若是仍是未查到,再去網絡請求。網絡請求,並下載成功後,先保存原圖到某個目錄下,而後再將原圖根據要求進行縮放,縮放後的圖片保存成另外一個圖片,方便使用。github
可是講真,先不說BitmapFun性能怎樣,它使用起來確實很麻煩。在使用前先要搞清楚ImageWorker,BitmapWorkerTask,ImageCache,DiskLruCache,ImageResizer,ImageFetcher等等這些類都是作什麼的,而後它們是怎樣配合使用的,因此要想用好它們有必定的學習門檻。面試
在早期Android開發中,由於沒有其它選擇,因此BitmapFun用的比較多,但如今已經退出了實際項目的開發舞臺。小程序
簡稱,UIL或者ImageLoader。這個框架老司機們應該不陌生,它曾經是圖片加載框架中的王者,Android開發老手們都用過它。緩存
github地址爲:github.com/nostra13/An…性能優化
UIL與gilde最大區別是可定製化,不管線程池,下載器,仍是解碼器均可以高度自定義。bash
它提供一系列配置選項,能很好地控制圖片加載和緩存的過程。網絡
主要特徵以下:多線程
UIL還提供了大量配置方式,如圖片加載狀態的回調(成功,失敗,進行中),加載動畫等;以及提供了移動端圖片加載框架的緩存思路:三級緩存策略 內存-sd卡-網絡。架構
整個UIL庫分爲 ImageLoaderEngine,Cache 及 ImageDownloader,ImageDecoder,BitmapDisplayer,BitmapProcessor 五大模塊,其中 Cache又分爲 MemoryCache 和 DiskCache 兩部分。
隨着google,facebook發佈本身的圖片加載和緩存框架,UIL佔的份額愈來愈小,但仍有至關部分人在使用它。
Picasso是著名的square公司的一個開源項目,它除了實現圖片的下載和二級緩存功能,還解決了常見的一些問題,如,在adapter中正常的處理ImageView回收和下載的取消問題;使用盡可能小的內存實現複雜的圖像變換等問題。
整個庫分爲Dispatcher、RequestHandler、Downloader、PicassoDrawable等模塊。
它具備以下優勢:
它的使用很簡單,咱們使用一行代碼便可實現圖片下載並渲染到ImageView中。
Picasso.with(context).load(url).into(imageView);
複製代碼
官網地址爲: square.github.io/picasso/
github地址爲:github.com/square/pica…
能夠看到,目前爲止已經有超過16.5k+個star,略高於UIL的start。
Fresco是Facebook開源的功能強大的圖片加載和緩存函數庫,相比其餘圖片緩存庫,Fresco最顯著的特色是具備三級緩存:兩級內存緩存和一級磁盤緩存。
主要特性以下:
Fresco 能夠看作成一個強大的圖片加載組件。其設計有一個叫作 image pipeline 的模塊,負責從網絡,從本地文件系統,本地資源加載圖片。爲了最大限度節省空間和CPU時間,它含有3級緩存設計(2級內存,1級文件)。還設計有一個叫作 Drawees 模塊,方便顯示loading圖,當圖片再也不顯示在屏幕上時,及時地釋放內存和空間佔用。Fresco 支持 Android2.3(API level 9) 及其以上系統。
官網地址: www.fresco-cn.org/
github地址爲:github.com/facebook/fr…
目前爲止已經有超過15.4k+個star。
在管理圖片內存領域上有着本身一套獨特的方法,在漸進式加載、支持gif等都是它與位列前茅的特性。
Glide是Google推薦的用於Android平臺上的圖片加載和緩存函數庫。這個庫被普遍應用在Google的開源項目中,Glide和Picasso有90%的類似度,只是在細節上仍是存在很多區別。
用一句話介紹是:glide是一款專一於提供流暢划動能力的「圖片加載和緩存框架」
Glide爲包含圖片的滾動列表作了儘量流暢的優化。除了靜態圖片,Glide也支持GIF格式圖片的顯示。Glide提供了靈活的API可讓開發者方便地替換下載圖片所用的網絡函數庫,默認狀況下,它使用HttpUrlConnection做爲網絡請求模塊,開發者也能夠根據本身項目的實際需求靈活使用Google的Volley或者Square的OkHttp等函數庫進行替換。
整個庫分爲 RequestManager(請求管理器),Engine(數據獲取引擎)、Fetcher(數據獲取器)、MemoryCache(內存緩存)、DiskLRUCache、Transformation(圖片處理)、Encoder(本地緩存存儲)、Registry(圖片類型及解析器配置)、Target(目標)等模塊。
Glide 優勢:
github址爲:github.com/bumptech/gl…
25.1k個star,是圖片加載類框架排名第一的框架,遙遙領先於其它框架。google 在2014開發者大會上演示的camera app就是基於gilde框架開發的。
它的使用方法很是簡單,加載圖片可使用一行代碼來完成。
Glide.with(context).load(url).into(imageView);
複製代碼
拋開BitmapFun不提,咱們看下4個框架的對比,
有了以上對比,我相信你們在選擇圖片加載和緩存方案時,心中已經基本有方向了。
想學習更多Android知識,或者獲取相關資料請加入Android開發交流羣:1018342383。 有面試資源系統整理分享,Java語言進階和Kotlin語言與Android相關技術內核,APP開發框架知識, 360°Android App全方位性能優化。Android前沿技術,高級UI、Gradle、RxJava、小程序、Hybrid、 移動架構師專題項目實戰環節、React Native、等技術教程!架構師課程、NDK模塊開發、 Flutter等全方面的 Android高級實踐技術講解。還有在線答疑