ImageLoaderEngine.java
LoadAndDisplayImageTask和ProcessAndDisplayImageTask任務分發器,負責分發任務給具體的線程池。
主要屬性:
(1). ImageLoaderConfiguration configuration
ImageLoader的配置信息,可包括圖片最大尺寸、線程池、緩存、下載器、解碼器等等
(2). Executor taskExecutor
用于執行從源獲取圖片任務的 Executor,為configuration中的 taskExecutor,如果為null,則會調用DefaultConfigurationFactory.createExecutor(…)根據配置返回一個默認的線程池。
(3). Executor taskExecutorForCachedImages
用于執行從緩存獲取圖片任務的 Executor,為configuration中的 taskExecutorForCachedImages,如果為null,則會調用DefaultConfigurationFactory.createExecutor(…)根據配置返回一個默認的線程池。
(4). Executor taskDistributor
任務分發線程池,任務指LoadAndDisplayImageTask和ProcessAndDisplayImageTask,因為只需要分發給上面的兩個 Executor 去執行任務,不存在較耗時或阻塞操作,所以用無并發數(Int 最大值)限制的線程池即可
(5). Map cacheKeysForImageAwares
ImageAware與內存緩存 key 對應的 map,key 為ImageAware的 id,value 為內存緩存的 key。
(6). Map uriLocks
圖片正在加載的重入鎖(可重入鎖,也叫做遞歸鎖,指的是同一線程 外層函數獲得鎖之后 ,內層遞歸函數仍然有獲取該鎖的代碼,但不受影響。) map,key 為圖片的 uri,value 為標識其正在加載的重入鎖。
(7). AtomicBoolean paused
是否被暫停。如果為true,則所有新的加載或顯示任務都會等待直到取消暫停(為false)。
(8). AtomicBoolean networkDenied
是否不允許訪問網絡,如果為true,通過ImageLoadingListener.onLoadingFailed(…)獲取圖片,則所有不在緩存中需要網絡訪問的請求都會失敗,返回失敗原因為網絡訪問被禁止。
(9). AtomicBoolean slowNetwork
是否是慢網絡情況,如果為true,則自動調用SlowNetworkImageDownloader下載圖片。
(10). Object pauseLock
暫停的等待鎖,可在engine被暫停后調用這個鎖等待。
主要函數:
(1). void submit(final LoadAndDisplayImageTask task)
添加一個LoadAndDisplayImageTask。直接用taskDistributor執行一個 Runnable,在 Runnable 內部根據圖片是否被磁盤緩存過確定使用taskExecutorForCachedImages還是taskExecutor執行該 task。
(2). void submit(ProcessAndDisplayImageTask task)
添加一個ProcessAndDisplayImageTask。直接用taskExecutorForCachedImages執行該 task。
(3). void pause()
暫停圖片加載任務。所有新的加載或顯示任務都會等待直到取消暫停(為false)。
(4). void resume()
繼續圖片加載任務。
(5). stop()
暫停所有加載和顯示圖片任務并清除這里的內部屬性值。
(6). fireCallback(Runnable r)
taskDistributor立即執行某個任務。
(7). getLockForUri(String uri)
得到某個 uri 的重入鎖,如果不存在則新建。
(8). createTaskExecutor()
調用DefaultConfigurationFactory.createExecutor(…)創建一個線程池。
(9). getLoadingUriForView(ImageAware imageAware)
得到某個imageAware正在加載的圖片 uri。
(10). prepareDisplayTaskFor(ImageAware imageAware, String memoryCacheKey)
準備開始一個Task。向cacheKeysForImageAwares中插入ImageAware的 id 和圖片在內存緩存中的 key。
(11). void cancelDisplayTaskFor(ImageAware imageAware)
取消一個顯示任務。從cacheKeysForImageAwares中刪除ImageAware對應元素。
(12). denyNetworkDownloads(boolean denyNetworkDownloads)
設置是否不允許網絡訪問。
(13). handleSlowNetwork(boolean handleSlowNetwork)
設置是否慢網絡情況。