通過前面幾篇的簡單解析,基本上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的時候,這些功能或者物件可以根據具體的業務選擇性使用 也可以不使用 到...