DisplayBitmapTask.java
顯示圖片的Task兵罢,實現(xiàn)了Runnable接口讲衫,必須在主線程調(diào)用疚察。
(1) run()
首先判斷imageAware
是否被 GC 回收怖竭,如果是直接調(diào)用取消加載回調(diào)接口ImageLoadingListener.onLoadingCancelled(…)毙替;
否則判斷imageAware是否被復(fù)用可岂,如果是直接調(diào)用取消加載回調(diào)接口ImageLoadingListener.onLoadingCancelled(…)错敢;
否則調(diào)用displayer顯示圖片,并將imageAware從正在加載的 map 中移除缕粹。調(diào)用加載成功回調(diào)接ImageLoadingListener.onLoadingComplete(…)稚茅。
對于 ListView 或是 GridView 這類會緩存 Item 的 View 來說,單個 Item 中如果含有 ImageView平斩,在滑動過程中可能因為異步加載及 View 復(fù)用導(dǎo)致圖片錯亂亚享,這里對imageAware
是否被復(fù)用的判斷就能很好的解決這個問題。原因類似:Android ListView 滑動過程中圖片顯示重復(fù)錯位閃爍問題原因及解決方案双戳。
** ProcessAndDisplayImageTask.java**
處理并顯示圖片的Task虹蒋,實現(xiàn)了Runnable接口。
主要函數(shù):
(1) run()
主要通過 imageLoadingInfo 得到BitmapProcessor處理圖片飒货,并用處理后的圖片和配置新建一個DisplayBitmapTask在ImageAware中顯示圖片魄衅。
LoadAndDisplayImageTask.java
加載并顯示圖片的Task,實現(xiàn)了Runnable接口塘辅,用于從網(wǎng)絡(luò)晃虫、文件系統(tǒng)或內(nèi)存獲取圖片并解析,然后調(diào)用DisplayBitmapTask在ImageAware中顯示圖片扣墩。
主要函數(shù):
(1) run()
獲取圖片并顯示
(2) tryLoadBitmap()
從磁盤緩存或網(wǎng)絡(luò)獲取圖片
(3) tryCacheImageOnDisk()
下載圖片并存儲在磁盤內(nèi)哲银,根據(jù)磁盤緩存圖片最長寬高的配置處理圖片。調(diào)用下載器下載并保存圖片呻惕。如果你在ImageLoaderConfiguration中還配置了maxImageWidthForDiskCache或者maxImageHeightForDiskCache荆责,還會調(diào)用resizeAndSaveImage()函數(shù),調(diào)整圖片尺寸亚脆,并保存新的圖片文件做院。
(4) downloadImage()
下載圖片并存儲在磁盤內(nèi)
(5) resizeAndSaveImage(int maxWidth, int maxHeight)
從磁盤緩存中得到圖片,重新設(shè)置大小及進行一些處理后保存
(6) getDownloader()
根據(jù)ImageLoaderEngine配置得到下載器。
如果不允許訪問網(wǎng)絡(luò)键耕,則使用不允許訪問網(wǎng)絡(luò)的圖片下載器NetworkDeniedImageDownloader寺滚;如果是慢網(wǎng)絡(luò)情況,則使用慢網(wǎng)絡(luò)情況下的圖片下載器SlowNetworkImageDownloader屈雄;否則直接使用ImageLoaderConfiguration中的downloader