概述
我要说的就是鼎鼎大名的Universal Image Loader,UIL是非常强大的一款图片加载框架,它不仅支持本地图片加载也支持网络图片加载还支持Android自身的drawable文件夹,asset文件夹里面的图片文件加载,也支持视频文件的缩略图加载。可以说是一款非常全面而强大的图片加载框架。说到这里你是不是也对这个框架非常好奇呢?
首先我们来看看UIL的代码结构。
我们可以看到UIL的代码结构主要分为两大部分,一部分是cache缓存部分,一部分是core主要用于UIL下载,加载和展示图片功能,当然也暴露了许多定制接口供给开发者使用。
Cache硬盘缓存
现在就来看看cache的硬盘缓存部分的源码。
大致上硬盘缓存部分有两种DiskCache,一种是基于BaseDiskCache的LimitedAgeDiskCache和UnlimitedDiskCache,另一种是基于DiskLruCache的LruDiskCache。基于BaseDiskCache的DiskCache没有使用LRU算法,基于DiskLruCache的有使用到LRU算法,以上的DiskCache都实现了DiskCache接口。
public interface DiskCache {
/**
* Returns root directory of disk cache
*
* @return Root directory of disk cache
*/
File getDirectory();
/**
* Returns file of cached image
*
* @param imageUri Original image URI
* @return File of cached image or <b>null</b> if image wasn't cached
*/
File get(String imageUri);
/**
* Saves image stream in disk cache.
* Incoming image stream shouldn't be closed in this method.
*
* @param imageUri Original image URI
* @param imageStream Input stream of image (shouldn't be closed in this method)
* @param listener Listener for saving progress, can be ignored if you don't use
* {@linkplain com.nostra13.universalimageloader.core.listener.ImageLoadingProgressListener
* progress listener} in ImageLoader calls
* @return <b>true</b> - if image was saved successfully; <b>false</b> - if image wasn't saved in disk cache.