码迷,mamicode.com
首页 > 其他好文 > 详细

简单的图片缓存封装类

时间:2015-08-10 22:31:42      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:

直接上代码:

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 方法获取缓存中的图片。

简单的图片缓存封装类

标签:

原文地址:http://my.oschina.net/jooo/blog/490353

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!