需求:图片异步加载 并且 适当压缩 UIL(Universal-Image-Loader)除此之外还有其他很多框架Glide,Fresco,Picasso等等。后面几个现在用的比较多.
UIL框架特点:
支持多线程图片加载(同步或者异步)支持自定义配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置支持自定义配置图片显示,例如:缓存开关选择,界面选项,图片加载进度以及显示支持图片内存缓存或者文件系统,设备SD缓存支持图片加载进度监听(包括图片下载进度监听)支持框架更多工具类的扩展同样可以支持例如ListView,GridView进行滑动的时候暂停或者恢复图片加载显示等功能。ImageLoader在使用之前需要进行全局配置一下,只需要设置一次即可
ImageLoaderConfiguration configuration=ImageLoaderConfiguration.createDefault(this); /*ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this) // 添加你的配置需求 .build();*/ ImageLoader.getInstance().init(configuration);上面的createDefault方法会给我们默认初始化一些配置项,所有配置可选项包括设置缓存大小,任务执行器,线程池线程数量,线程权重,任务执行算法,磁盘缓存大小,缓存文件数量,缓存文件命名规则,图片下载器,解码器,图片显示配置项等等,大家根据项目实际情况配置即可。
Universal-Image-Loader整体流程:下载图片——将图片缓存在磁盘中——解码图片成为Bitmap——Bitmap的预处理——缓存在Bitmap内存中——Bitmap的后期处理——显示Bitmap
几个重要的类 ImageLoaderEngine:任务分发器,负责分发LoadAndDisplayImageTask和ProcessAndDisplayImageTask给具体的线程池去执行。 ImageAware:显示图片的对象,可以是ImageView等。 ImageDownloader:图片下载器,负责从图片的各个来源获取输入流。 Cache:图片缓存,分为MemoryCache和DiskCache两部分。 MemoryCache:内存图片缓存,可向内存缓存缓存图片或从内存缓存读取图片。 DiskCache:本地图片缓存,可向本地磁盘缓存保存图片或从本地磁盘读取图片。 ImageDecoder:图片解码器,负责将图片输入流InputStream转换为Bitmap对象。 BitmapProcessor:图片处理器,负责从缓存读取或写入前对图片进行处理。 BitmapDisplayer:将Bitmap对象显示在相应的控件ImageAware上。 LoadAndDisplayImageTask:用于加载并显示图片的任务。 ProcessAndDisplayImageTask:用于处理并显示图片的任务。 DisplayBitmapTask:用于显示图片的任务。
参考 Android 图片加载框架Universal-Image-Loader源码解析
Android Universal Image Loader 源码分析