Android图片缓存工具类

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

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