ImageLoaderEngine.java

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)
设置是否慢网络情况。

你可能感兴趣的:(ImageLoaderEngine.java)