开发一个简洁而实用的Android图片加载缓存框架,并在内存占用与加载图片所需时间这两个方面与主流图片加载框架之一Universal Image Loader做出比较,来帮助我们量化这个框架的性能。通过开发这个框架,我们可以进一步深入了解Android中的Bitmap操作、LruCache、LruDiskCache,让我们以后与Bitmap打交道能够更加得心应手。若对Bitmap的大小计算及inSampleSize计算还不太熟悉,请参考这里:高效加载Bitmap。由于个人水平有限,叙述中必然存在不准确或是不清晰的地方,希望大家能够指出,谢谢大家。
一、图片加载框架需求描述
在着手进行实际开发工作之前,我们先来明确以下我们的需求。通常来说,一个实用的图片加载框架应该具备以下2个功能:
图片的加载:包括从不同来源(网络、文件系统、内存等),支持同步及异步方式,支持对图片的压缩等等;
图片的缓存:包括内存缓存和磁盘缓存。
下面我们来具体描述下这些需求。
1. 图片的加载
(1)同步加载与异步加载
我们先来简单的复习下同步与异步的概念:
同步:发出了一个“调用”后,需要等到该调用返回才能继续执行;
异步:发出了一个“调用”后,无需等待该调用返回就能继续执行。
同步加载就是我们发出加载图片这个调用后,直到完成加载我们才继续干别的活,否则就一直等着;异步加载也就是发出加载图片这个调用后我们可以直接去干别的活。
(2)从不同的来源加载
我们的应用有时候需要从网络上加载图片,有时候需要从磁盘加载,有时候又希望从内存中直接获取。因此一个合格的图片加载框架应该支持从不同的来源来加载一个图片。对于网络上的图片,我们可以使用HttpURLConnection来下载并解析;对于磁盘中的图片,我们可以使用BitmapFactory的decodeFile方法;对于内存中的Bitmap,我们直接就可以获取。
(3)图片的压缩
关于对图片的压缩,主要的工作是计算出inSampleSize,剩下的细节在下面实现部分我们会介绍。










