ImageLoaderEngine.java

ImageLoaderEngine.java
LoadAndDisplayImageTask和ProcessAndDisplayImageTask任務(wù)分發(fā)器,負責(zé)分發(fā)任務(wù)給具體的線程池。
主要屬性:
(1). ImageLoaderConfiguration configuration
ImageLoader的配置信息,可包括圖片最大尺寸、線程池、緩存、下載器、解碼器等等
(2). Executor taskExecutor
用于執(zhí)行從源獲取圖片任務(wù)的 Executor,為configuration中的 taskExecutor,如果為null,則會調(diào)用DefaultConfigurationFactory.createExecutor(…)根據(jù)配置返回一個默認的線程池。
(3). Executor taskExecutorForCachedImages
用于執(zhí)行從緩存獲取圖片任務(wù)的 Executor,為configuration中的 taskExecutorForCachedImages,如果為null,則會調(diào)用DefaultConfigurationFactory.createExecutor(…)根據(jù)配置返回一個默認的線程池。
(4). Executor taskDistributor
任務(wù)分發(fā)線程池,任務(wù)指LoadAndDisplayImageTask和ProcessAndDisplayImageTask,因為只需要分發(fā)給上面的兩個 Executor 去執(zhí)行任務(wù),不存在較耗時或阻塞操作,所以用無并發(fā)數(shù)(Int 最大值)限制的線程池即可
(5). Map cacheKeysForImageAwares
ImageAware與內(nèi)存緩存 key 對應(yīng)的 map,key 為ImageAware的 id,value 為內(nèi)存緩存的 key。
(6). Map uriLocks
圖片正在加載的重入鎖(可重入鎖,也叫做遞歸鎖,指的是同一線程 外層函數(shù)獲得鎖之后 ,內(nèi)層遞歸函數(shù)仍然有獲取該鎖的代碼,但不受影響。) map,key 為圖片的 uri,value 為標識其正在加載的重入鎖。
(7). AtomicBoolean paused
是否被暫停。如果為true,則所有新的加載或顯示任務(wù)都會等待直到取消暫停(為false)。
(8). AtomicBoolean networkDenied
是否不允許訪問網(wǎng)絡(luò),如果為true,通過ImageLoadingListener.onLoadingFailed(…)獲取圖片,則所有不在緩存中需要網(wǎng)絡(luò)訪問的請求都會失敗,返回失敗原因為網(wǎng)絡(luò)訪問被禁止。
(9). AtomicBoolean slowNetwork
是否是慢網(wǎng)絡(luò)情況,如果為true,則自動調(diào)用SlowNetworkImageDownloader下載圖片。
(10). Object pauseLock
暫停的等待鎖,可在engine被暫停后調(diào)用這個鎖等待。

主要函數(shù):
(1). void submit(final LoadAndDisplayImageTask task)
添加一個LoadAndDisplayImageTask。直接用taskDistributor執(zhí)行一個 Runnable,在 Runnable 內(nèi)部根據(jù)圖片是否被磁盤緩存過確定使用taskExecutorForCachedImages還是taskExecutor執(zhí)行該 task。
(2). void submit(ProcessAndDisplayImageTask task)
添加一個ProcessAndDisplayImageTask。直接用taskExecutorForCachedImages執(zhí)行該 task。
(3). void pause()
暫停圖片加載任務(wù)。所有新的加載或顯示任務(wù)都會等待直到取消暫停(為false)。
(4). void resume()
繼續(xù)圖片加載任務(wù)。
(5). stop()
暫停所有加載和顯示圖片任務(wù)并清除這里的內(nèi)部屬性值。
(6). fireCallback(Runnable r)
taskDistributor立即執(zhí)行某個任務(wù)。
(7). getLockForUri(String uri)
得到某個 uri 的重入鎖,如果不存在則新建。
(8). createTaskExecutor()
調(diào)用DefaultConfigurationFactory.createExecutor(…)創(chuàng)建一個線程池。
(9). getLoadingUriForView(ImageAware imageAware)
得到某個imageAware正在加載的圖片 uri。
(10). prepareDisplayTaskFor(ImageAware imageAware, String memoryCacheKey)
準備開始一個Task。向cacheKeysForImageAwares中插入ImageAware的 id 和圖片在內(nèi)存緩存中的 key。
(11). void cancelDisplayTaskFor(ImageAware imageAware)
取消一個顯示任務(wù)。從cacheKeysForImageAwares中刪除ImageAware對應(yīng)元素。
(12). denyNetworkDownloads(boolean denyNetworkDownloads)
設(shè)置是否不允許網(wǎng)絡(luò)訪問。
(13). handleSlowNetwork(boolean handleSlowNetwork)
設(shè)置是否慢網(wǎng)絡(luò)情況。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容