欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Android图片缓存工具类,, public c

来源: javaer 分享于  点击 25462 次 点评:191

Android图片缓存工具类,, public c


    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();          }      }  
相关栏目:

用户点评