Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Bitmap深入介紹(三)--- 開源加載框架簡述

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

編輯:關於Android編程

流行框架

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

基本框架

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

比較

下面簡單介紹一下他們的優缺點:

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 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圖片。壓縮標准。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved