--[摘自](http://blog.csdn.net/guolin_blog/article/details/9316683)
1、展现高分辨率图片时,先将图片进行压缩。
为了避免OOM异常,最好在解析每张图片的时候都先检查一下图片的大小,大小知道了,我们就可以决定是把整张图片加载到内存中还是加载一个压缩版的图片到内存中。
以下几个因素是我们需要考虑的:
预估一下加载整张图片所需占用的内存。
为了加载这一张图片你所愿意提供多少内存。
用于展示这张图片的控件的实际大小。
当前设备的屏幕尺寸和分辨率。
2、加载一大推图片时,使用图片缓存技术 最核心的类是LruCache。非常适合用来缓存图片,它的主要算法原理是把最近使用的对象用强引用存储在 LinkedHashMap 中,并且把最近最少使用的对象在缓存值达到预设定值之前从内存中移除。
1).获取到可用内存的最大值,使用内存超出这个值会引起OutOfMemory异常。
2).使用了系统分配给应用程序的八分之一内存来作为缓存大小
3).当向 ImageView 中加载一张图片时,首先会在 LruCache 的缓存中进行检查。如果找到了相应的键值,则会立刻更新ImageView ,否则开启一个后台线程来加载这张图片。
4).BitmapWorkerTask 还要把新加载的图片的键值对放到缓存中。
3、使用软引用
软/弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。利用这个队列可以得知被回收的软/弱引用的对象列表,从而为缓冲器清除已失效的软/弱引用。
定义一个HashMap,保存软引用对象。
private Map