ImageLoader的簡單解析(六)

2021-07-15 07:49:46 字數 2596 閱讀 9422

通過前面幾篇的簡單解析,基本上imageloader能講解完的都講解完了,不過還有乙個知識點沒有分析。就是imageloader的如下方法:

其實找幾個過載方法執行的流程也很簡單,博主在此就按照分析displayimage方法來展開此篇博文!(同樣,博主也假設你已經讀過了博主的imageloader的其他幾篇博文)

imageloader提供了兩種方式的loadimage方法:沒有返回值的loadimage系列過載方法和有返回bitmap物件的loadimagesync方法。

先開始擼一遍loadimagesync的都的工作流程:

它的任務也很簡單,就是根據的uri同步載入,然後處理成bitmap物件供客戶端imageview使用。

loadimagesync最終都會呼叫方法引數最多的那個過載方法,所以直接把它拿來分析就夠了。**如下:

public bitmap loadimagesync(string uri, imagesize targetimagesize, displayimageoptions options) 

//主要是設定options的syncloading屬性為true

options = new displayimageoptions.builder().clonefrom(options).syncloading(true).build();

syncimageloadinglistener listener = new syncimageloadinglistener();

loadimage(uri, targetimagesize, options, listener);

return listener.getloadedbitmap();

}

上面**的執行流程如下:

1)如果客戶端傳入的options為null,就使用imageloader預設的displayimageoptions

2)clone乙個options,並設定其同步載入機制為true,表明為同步載入,生成bitmap物件

3)建立syncimageloadinglistener 這個物件也很簡單,前幾篇部落格中也提到過它(確切地說imageloadinglistener)是的身影,可以通過這個介面監聽imagelaoder載入過程。而在這裡syncimageloadinglistener 內部持有bitmap,當onloadingcomplete執行的時候給它賦值(具體流程參考博主其餘幾篇部落格),並通過getloadedbitmap方法得到這個bitmap。

4)通過loadimage方法正式對進行載入,把生成的bitmap最終交給syncimageloadinglistener 持有,並呼叫listener.getloadedbitmap()返回。

private

static

class

syncimageloadinglistener

extends

******imageloadinglistener

public bitmap getloadedbitmap()

}

既然要用到loadimage方法來完成loadimagesync的核心功能,很顯然繼續分析loadimage了。最終會呼叫imageload如下的過載方法:

public

void

loadimage(string uri, imagesize targetimagesize, displayimageoptions options,

imageloadinglistener listener, imageloadingprogresslistener progresslistener)

所以很簡單,只是簡單呼叫了diplayimage方法,然後通過這個方法載入對應的資源並生成bitmap物件,這樣就完成了loadimagesync的工作過程。需要注意的是我們知道在displayimage方法載入好資源並生成bitmap之後,是要交給displaybitmaptask來處理,並最終呼叫viewaware的setimagebimtap讓展示的。那麼我們在呼叫loadimagesync方法的時候並沒有傳入我們的imageview。對此種情況imageloader也做了處理:如上面**所示,提供了乙個nonviewaware ,這個nonviewaware跟前面博文分析的imageviewaware一樣,都是繼承與viewaware,而這個nonviewaware顧名思義就是沒有實際的imageview供我們使用。所以你也肯定能想象得到它的setimagebimtap肯定是什麼也沒做了(如下面**所示):

@override

public

boolean

setimagedrawable(drawable drawable)

@override

public

boolean

setimagebitmap(bitmap bitmap)

本篇博文很簡單(想比較深入的了解imageloader的工作流程的話,請參考博主的其他幾篇部落格),到此結束!

實現簡單的ImageLoader

android開發中經常會對進行處理,如何載入和快取的實現有難有易,這裡實現乙個簡單的imageloader,只是簡述其中的基本原理。整個實現需要用到的快取和載入,首先需要實現的快取。android手機快取又分別可以用到記憶體和sd卡,記憶體實現imagecache public class ima...

實現簡單的ImageLoader

android開發中經常會對進行處理,如何載入和快取的實現有難有易,這裡實現乙個簡單的imageloader,只是簡述其中的基本原理。整個實現需要用到的快取和載入,首先需要實現的快取。android手機快取又分別可以用到記憶體和sd卡,記憶體實現imagecache public class ima...

ImageLoader的簡單分析(終結篇)

還是通過乙個圖來對上面的講解做乙個總結吧 通過上面的也可以發現imagloader提供了二級快取機制 即memory cache 和disk cache 注 上圖中有的箭頭使用虛線箭頭的地方表明 在客戶端使用imagelaoder的時候,這些功能或者物件可以根據具體的業務選擇性使用 也可以不使用 到...