android 图片缓存工具类,Android图片缓存工具类

public class ImageCache {

static private ImageCache cache;// 一个Cache实例

private Hashtable ImageRefs;// 用于Chche内容的存储

private ReferenceQueue q;// 垃圾Reference的队列

// 继承SoftReference,使得每一个实例都具有可识别的标识。

private class ImageRef extends SoftReference {

private String key = "";

public ImageRef(Image im, ReferenceQueue q) {

super(im, q);

key = im.getId();

}

}

// 构建一个缓存器实例

private ImageCache() {

ImageRefs = new Hashtable();

q = new ReferenceQueue();

}

// 取得缓存器实例

public static ImageCache getInstance() {

if (cache == null) {

cache = new ImageCache();

}

return cache;

}

// 以软引用的方式对一个Image对象的实例进行引用并保存该引用

public void cacheImage(Image im) {

cleanCache();// 清除垃圾引用

ImageRef ref = new ImageRef(im, q);

ImageRefs.put(im.getId(), ref);

}

// 依据所指定的ID号,重新获取相应Image对象的实例

public Image getImage(String id) {

Image im = null;

// 缓存中是否有该Image实例的软引用,如果有,从软引用中取得。

if (ImageRefs.containsKey(id)) {

ImageRef ref = (ImageRef) ImageRefs.get(id);

im = (Image) ref.get();

}

// 如果没有软引用,或者从软引用中得到的实例是null,重新构建一个实例,

// 并保存对这个新建实例的软引用

if (im == null) {

im = new Image(id);

System.out.println("Retrieve From ImageInfoCenter. ID=" + id);

this.cacheImage(im);

}

return im;

}

private void cleanCache() {

ImageRef ref = null;

while ((ref = (ImageRef) q.poll()) != null) {

ImageRefs.remove(ref.key);

}

}

// 清除Cache内的全部内容

public void clearCache() {

cleanCache();

ImageRefs.clear();

System.gc();

System.runFinalization();

}

}

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

特别注意:本站所有转载文章言论不代表本站观点!

本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值