| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
f25p
10年前发布

Android图片缓存工具类

    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();            }        }