Android Bitmap深入介紹(三)--- 開源載入架構簡述

來源:互聯網
上載者:User

標籤:

流行架構

目前使用非常廣泛的架構技術主要有Android Universal Image Loader,Picasso, Glide和Fresco,最開始出現的應該算是UIL(Universal Image Loader),記得剛開始用圖片載入架構的時候,主要就是使用UIL,UIL功能豐富。Picasso是Square搞出來的,Glide與Picasso比較類似,Google推薦Glide,Fresco是Facebook推出的一個圖片載入庫,這個庫非常值得一看,裡面有很多很有特色的地方,非常強大的一個開源庫。除此之外Volley也是一個很好的圖片載入架構,非常輕量。

基本架構

這些架構基本都可以分成這麼幾個部分:執行引擎(Engine,或者說調度中心),請求產生部分,緩衝部分,圖片處理部分,圖片顯示部分。這基本涵蓋了圖片從網路或本地擷取過來,顯示給使用者的整個流程。

比較

關於他們之間的比較,可以參考Trinea的文章Android 三大圖片緩衝原理、特性對比,下面簡單介紹一下他們的優缺點:

  • Android-Universal-Image-Loader: 是最早的圖片載入庫,應用也最廣泛,功能非常豐富。它支援下載監聽,提供了很多緩衝演算法,可以在滾動中暫停載入
  • Picasso:
    Square推出的開源庫,它支援圖片緩衝監控,按照優先順序來載入圖片
  • Glide
    Google推薦的圖片載入開源庫,支援gif(利用的是第三方包),webp,縮圖,video。提供了介面讓使用者使用自己需要的網路通訊協定棧。另外一方面,Glide可以與Activity/Fragment的周期保持一致,並且提供了trimMemory供使用。
  • Fresco
    facebook 推出的圖片載入開源庫,功能非常強大。主要有記憶體管理,漸進式載入,webp格式,gif,pipeline載入。
相關源碼分析文章

網路上面關於這些圖片開源架構的源碼分析還是挺多的,不過這些源碼分析一般都僅供參考輔助,如果自己需要瞭解這些源碼的內容,最好自己親自去看看源碼。

Android-Universal-Image-Loader: Android Universal Image Loader 源碼分析

Picasso: http://blog.happyhls.me/category/android/picasso/
http://skykai521.github.io/2016/02/25/Picasso%E6%BA%90%E4%BB%A3%E7%A0%81%E5%88%86%E6%9E%90/

Glide: Android Glide源碼解析

Fresco: Fresco-Source-Analysis

相關特性gif

目前Glide和Fresco都支援gif。對於gif,Fresco的處理跟我們對gif的理解是一致的,先將gif的所有幀解碼出來,然後使用動畫一幀一幀地放。具體是通過變化Drawable的繪製,每次繪製的時候,繪製對應的一幀:

  private boolean renderFrame(      Canvas canvas,      int frameNumber,      int frameMonotonicNumber) {    CloseableReference<Bitmap> bitmapReference =        mAnimatedDrawableBackend.getBitmapForFrame(frameNumber);    if (bitmapReference != null) {      canvas.drawBitmap(bitmapReference.get(), 0f, 0f, mPaint);      if (mLastDrawnFrame != null) {        mLastDrawnFrame.close();      }      if (mIsRunning && frameMonotonicNumber > mLastDrawnFrameMonotonicNumber) {        int droppedFrames = frameMonotonicNumber - mLastDrawnFrameMonotonicNumber - 1;        mAnimatedDrawableDiagnostics.incrementDrawnFrames(1);        mAnimatedDrawableDiagnostics.incrementDroppedFrames(droppedFrames);        if (droppedFrames > 0) {          FLog.v(TAG, "(%s) Dropped %d frames", mLogId, droppedFrames);        }      }      mLastDrawnFrame = bitmapReference;      mLastDrawnFrameNumber = frameNumber;      mLastDrawnFrameMonotonicNumber = frameMonotonicNumber;      FLog.v(TAG, "(%s) Drew frame %d", mLogId, frameNumber);      return true;    }    return false;  }
webp

WebP是google推出的一種新的影像形式,他可以對圖片進行有效地壓縮又不影響圖片的相容性和實際清晰度,提高圖片下載速度,在相同品質它壓縮後的體積大概是jpg的40%。但是編碼時間大概比jpg的長8倍。目前Facebook跟QQ空間都有使用WebP圖片。

漸進載入

這個是Fresco提供的功能,目前只支援jpg網狀圖片。可以在片的時候,讓圖片逐漸地由模糊變清晰漸漸地顯示出來。jpeg格式的圖片有兩種方式,一種是直接編碼的,另外一種是漸進式編碼的,能夠用於Fresco漸進載入的是要通過漸進式編碼的jpeg圖片。壓縮標準。

Android Bitmap深入介紹(三)--- 開源載入架構簡述

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.