Android教程樣本BitmapFun分析

來源:互聯網
上載者:User

Google為Android開發提供了一個培訓教程,在載入圖片一節中提供了樣本程式BitmapFun,實現了圖片下載、緩衝、解析載入的功能,具體分析如下:

1、程式介紹


     程式整體結構如所示,應用啟動後進入ImageGridActivity,首先會載入一個GridView,該gridview根據預先設定好的URL(在Images.java中,這個類就存了些URL,其他什麼也沒有,恩)從伺服器上下載縮圖資源顯示,點擊某個縮圖後會轉到ImageDetailActivity,裡面是一個ViewPager,用於顯示相應的大圖,相應的大圖一開始也會從伺服器上下載,之後會緩衝到本地,縮圖也是這樣。

2、具體分析

1)Images.java

該類只用來提供資料地址,裡面有兩個String的數組,分別存放了縮圖與大圖的請求地址。


2)在UI包中包含了兩個Activity->ImageGridActivity和ImageDetailActivity,他們分別載入GridView與ViewPager,對應到ImageGridFragment和ImageDetailFragment,他們會在相應的Adapter中通過getView請求圖片進行loadBitmap操作,這裡就用到了後面util包中的各個類。總體流程都是先在緩衝中找,緩衝中沒有就從伺服器下載;緩衝又分為記憶體緩衝和硬碟緩衝,記憶體中沒有就到硬碟中找。

3)ImageWorker、ImageResizer、ImageFetcher

這三個類提供了圖片載入與處理的操作,他們的關係如下:



ImageWork是一個抽象類別,是這三個類的基礎,loadImage()方法為外部提供了一個載入圖片的統一介面,其中具體的載入過程通過一個非同步類來後台執行,非同步類又會調用processBitmap()方法。在這裡ImageWork沒有實現該方法,因為圖片的載入方式有多種,包括網路下載,從resources中解析和本地檔案解析等,因此把它定義為一個抽象方法,具體的實現由子類來決定(也就是傳說中的原廠模式)。在該類中還包含了緩衝管理ImageCache的引用,內部類CacheAsyncTask非同步呼叫closeCache等方法管理硬碟緩衝。

ImageResizer繼承自ImageWork,定義了幾種圖片解析方法和一個採樣參數計算方法。就像類名所表示的,該類主要是在父類ImageWork的基礎上,根據傳入的要求長寬對圖片進行縮放,也就是resize。類中實現了processBitmap()方法,選了一種圖片解析方式,即根據resID解析resources下的圖片。如果想換其他的解析方式,只要定義一個子類覆寫該方法即可。後面會看到子類ImageFecher覆寫了該方法,根據該應用需要選擇了從本地檔案中解析圖片。

ImageFecher繼承自ImageResizer,又添加了一個網路操作和網狀圖片的硬碟緩衝httpDiskCache設定,clearCacheInternal等方法覆寫了ImageWork的該方法,添加了對httpDishCache的處理。

        到這裡對圖片載入和處理的功能就定義好了,後面在實際的調用中只使用ImageFecher這個全功能類。

4)ImageCache

該類主要用來處理圖片緩衝這個事,內部有記憶體緩衝mLruCache和硬碟緩衝mDiskLruCache,addBitmapToCache()將圖片進行緩衝,通過get方法可以分別從記憶體和硬碟中擷取圖片,後面還定義了一些特定功能的方法。

ImageCacheParams是個內部類,裡麵包含了一系列的緩衝參數,像緩衝大小、圖片壓縮格式、緩衝使能等。使用ImageCache的時候需要首先執行個體化該參數類,調整了各個參數後傳入ImageCache的建構函式。

還有一個RetainFragment內部類,用於儲存一個ImageCache的引用,就這一個功能。

3、執行個體化流程


是使用緩衝時的具體調用時序圖,主要是緩衝的初始化過程。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.