天天看點

簡述ImageLoader顯示圖檔的流程

分析 displayImage()流程

1.傳入的參數有url,options,targetSize,listeneer還有ImageView;

2.健壯性判斷。判斷:

  • ImageView是否為空;
  • options是否為空,如果為空,則産生預設配置。
  • 判斷Url是否為空

3.如果url為空,則通過listener回調相應的方法()。并根據options來這是相應的Image圖檔。

4.如果url不為空,則:

  • 制定TagetSize,根據配置資訊;
  • 根據TagetSize和Url生成一個key,去擷取緩存中的bitmap對象;

5.如果bitmap對象不對空,且沒有被複用,則是根據options的參數做善後處理;

  • 如果options.shouldPostProcess()為false,則将緩存中bitmap拿到,并且通過options的displayer進行展示,listener進行回調。
  • 如果需要做處理,則将相應的資料封裝成ImageLoadingInfo對象,去處理加載展示任務。并且根據options分為同步和異步;處理是調用了options裡面封裝的processor進行處理,處理之後再将資料顯示。

6.如果bitmap為空,

  • 根據options的配置,做一個Loading狀态的顯示
  • 根據每一個Url都有一個同步鎖,在同步鎖内,再次去檢查記憶體中是否有緩存;如果沒有去磁盤中做檢查,如果磁盤中有,将其進行編碼成bitmap
  • 如果bitmap為空,則進行網絡請求,網絡請求是通過config中定義的下載下傳器,将圖檔緩存到磁盤中。進行磁盤中的拿到記憶體中,進行參數配置,成bitmap
  • 顯示bitmap。