DisplayBitmapTask.java
显示图片的Task,实现了Runnable接口,必须在主线程调用。
(1) run()
首先判断imageAware
是否被 GC 回收,如果是直接调用取消加载回调接口ImageLoadingListener.onLoadingCancelled(…);
否则判断imageAware是否被复用,如果是直接调用取消加载回调接口ImageLoadingListener.onLoadingCancelled(…);
否则调用displayer显示图片,并将imageAware从正在加载的 map 中移除。调用加载成功回调接ImageLoadingListener.onLoadingComplete(…)。
对于 ListView 或是 GridView 这类会缓存 Item 的 View 来说,单个 Item 中如果含有 ImageView,在滑动过程中可能因为异步加载及 View 复用导致图片错乱,这里对imageAware
是否被复用的判断就能很好的解决这个问题。原因类似:Android ListView 滑动过程中图片显示重复错位闪烁问题原因及解决方案。
** ProcessAndDisplayImageTask.java**
处理并显示图片的Task,实现了Runnable接口。
主要函数:
(1) run()
主要通过 imageLoadingInfo 得到BitmapProcessor处理图片,并用处理后的图片和配置新建一个DisplayBitmapTask在ImageAware中显示图片。
LoadAndDisplayImageTask.java
加载并显示图片的Task,实现了Runnable接口,用于从网络、文件系统或内存获取图片并解析,然后调用DisplayBitmapTask在ImageAware中显示图片。
主要函数:
(1) run()
获取图片并显示
(2) tryLoadBitmap()
从磁盘缓存或网络获取图片
(3) tryCacheImageOnDisk()
下载图片并存储在磁盘内,根据磁盘缓存图片最长宽高的配置处理图片。调用下载器下载并保存图片。如果你在ImageLoaderConfiguration中还配置了maxImageWidthForDiskCache或者maxImageHeightForDiskCache,还会调用resizeAndSaveImage()函数,调整图片尺寸,并保存新的图片文件。
(4) downloadImage()
下载图片并存储在磁盘内
(5) resizeAndSaveImage(int maxWidth, int maxHeight)
从磁盘缓存中得到图片,重新设置大小及进行一些处理后保存
(6) getDownloader()
根据ImageLoaderEngine配置得到下载器。
如果不允许访问网络,则使用不允许访问网络的图片下载器NetworkDeniedImageDownloader;如果是慢网络情况,则使用慢网络情况下的图片下载器SlowNetworkImageDownloader;否则直接使用ImageLoaderConfiguration中的downloader