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

Android图片缓存工具类

发布时间:2020-12-15 00:23:13 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 public class ImageCache { static private ImageCache cache;// 一个Cache实例 private HashtableString,ImageRef ImageRefs;// 用于Chche内容的存储

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

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

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

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

    推荐文章
      热点阅读