Android图片缓存工具类
发布时间:2020-05-24 14:51:43 所属栏目:Java 来源:互联网
导读:Android图片缓存工具类
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 public class ImageCache {
static private ImageCache cache;// 一个Cache实例
private Hashtable<String,ImageRef> ImageRefs;// 用于Chche内容的存储
private ReferenceQueue<Image> q;// 垃圾Reference的队列
// 继承SoftReference,使得每一个实例都具有可识别的标识。
private class ImageRef extends SoftReference<Image> {
private String key = "";
public ImageRef(Image im,ReferenceQueue<Image> q) {
super(im,q);
key = im.getId();
}
}
// 构建一个缓存器实例
private ImageCache() {
ImageRefs = new Hashtable<String,ImageRef>();
q = new ReferenceQueue<Image>();
}
// 取得缓存器实例
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();
}
}
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
