您可以使用LRUCache(最近最少使用,首先丢弃最近最少使用的项目)来存储图像。来自 Android 文档:
保存对有限数量值的强引用的缓存。
每次访问一个值时,它都会移动到队列的头部。
当一个值被添加到一个完整的缓存中时,该值末尾的值
队列被驱逐,可能有资格进行垃圾回收。
这是一个内存缓存,因此我们可以缓存的图像数量是有限的。确定缓存大小以根据可用堆内存计算它的好方法。下面的代码就是一个例子
int memClass = ((ActivityManager)activity.getSystemService( Context.ACTIVITY_SERVICE)).getMemoryClass();
int cacheSize = 1024 * 1024 * memClass / 8;
LruCache cache = new LruCache<String, Bitmap>(cacheSize);
我们使用Bitmap 方法来确定放入缓存中的每个元素的大小。在这个例子中,我们使用了可用堆内存的 1/8。如果需要,应增加缓存大小。
public class AppCache extends LruCache<String, Bitmap>
{
public AppCache(int maxSize)
{
super(maxSize);
}
@Override
protected int sizeOf(String key, Bitmap value)
{
return value.getByteCount();
}
@Override
protected void entryRemoved(boolean evicted, String key, Bitmap oldValue, Bitmap newValue)
{
oldValue.recycle();
}
}
除此之外,请查看 “缓存位图” 上的 Android 文档,其中说:
内存缓存以占用宝贵的应用程序内存为代价提供对位图的快速访问。 LruCache 类(也可在支持库中使用回 API 级别 4)特别适合缓存位图的任务,将最近引用的对象保存在强引用的 LinkedHashMap 中,并在缓存超过其之前驱逐最近最少使用的成员指定大小。
http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html