简单的图片缓存封装类

直接上代码:

public class BitmapCache {

private LruCache<String, Bitmap> lc;//强引用

private HashMap<String, SoftReference<Bitmap>> smap;//弱引用

public BitmapCache() {

smap=new HashMap<String, SoftReference<Bitmap>>();

                //取内存的八分之一作为强引用缓存空间

lc=new MyLruCache((int)(Runtime.getRuntime().maxMemory()/8));

}

//将图片存入缓存,以图片的下载地址作为图片获取的键

public void setImage(String url,Bitmap result){

lc.put(url, result);

}

//从缓存里取图片,以图片的下载地址作为键,获取相应图片

public Bitmap getImage (String url){

Bitmap result;

result = lc.get(url);

if (result == null) {

//强引用中没有图片,去弱引用中获取

SoftReference<Bitmap> so = smap.get(url);

if (so != null) {

result = so.get();

return result;

}

} else {

return result;

}

return null;

}

//自定义强引用类,当强引用中的图片被移除时,将移除的图片添加到弱引用中

class MyLruCache extends LruCache<String, Bitmap>{


public MyLruCache(int maxSize) {

super(maxSize);

}

@Override

protected int sizeOf(String key, Bitmap value) {

//调用getByteCount()方法,API最小在12以上

return value.getByteCount();

}

@Override

protected void entryRemoved(boolean evicted, String key,

Bitmap oldValue, Bitmap newValue) {

smap.put(key, new SoftReference<Bitmap>(oldValue));

}

}

}

该类的使用很简单,实例化该类,

通过该类的setImage方法存储下载的图片,通过该类的getImage 方法获取缓存中的图片。

你可能感兴趣的:(简单的图片缓存封装类)