本文不是具体编码去实现一个图片加载的框架,而是从理论上来讲解设计一个图片加载框架的注意事项和涉及的知识点,提供一个思路,或者帮助童鞋们应付面试。目前Android 发展至今优秀的图片加载框架太多,例如:Imageloader、Picasso、Glide等等。但是作为程序猿,懂得其中的实现原理还是相当重要的,只有懂得才能更好地使用。于是乎,今天我就简单设计一个网络加载图片框架。主要就是熟悉图片的网络加载机制。
一、简介
一个实用的图片加载框架应该具备以下两个功能:
- 图片的加载:
包括从不同来源(网络、内存、文件系统等)
支持同步及异步方式
支持对图片的压缩(有效的降低OOM的发生概率)等等; - 图片的缓存:
包括内存缓存和磁盘缓存。
下面就围绕着两点来展开。
二、图片加载
不同来源(网络、内存、文件系统等)
根据不同的业务需求和使用场景,我们的应用有时候需要从网络上加载图片,有时候需要从磁盘加载,有时候又希望从内存中直接获取。因此一个完善的图片加载框架应该支持从不同的来源来加载一个图片:
- 对于网络上的图片,我们可以使用HttpURLConnection来下载并解析;
- 对于磁盘中的图片,我们可以使用BitmapFactory的decodeFile方法;
- 对于内存中的图片,则直接使用即可。