加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读