栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用WeakReferences有什么好处?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用WeakReferences有什么好处?

因此,我考虑将WeakReferences用于所有对视图使用的位图的引用。我从未使用过WeakReference,并且不确定这是否是一个好的应用程序。任何机构都可以提供有用的指示或技巧吗?

小心,这对您来说很危险。GC可能会删除您的所有位图,而您的应用程序可能仍需要它们。

关于WeakReference的关键问题是了解硬引用之间的区别。如果您的应用程序中不再有对位图的硬引用,则允许GC从内存中原子删除该对象,并且所有现有的弱引用将立即指向null。就您而言,您不能在整个代码中使用弱引用。

这是解决方案的想法。创建一个容器对象,该容器对象将(仅)保留对所有位图的弱引用。您的视图应始终仅引用带有硬引用的位图。视图创建位图时,应将其注册到容器对象中。当要使用视图时,应从容器中获取硬引用。

这样,如果没有视图引用位图,则GC将收集对象而不会产生视图副作用,因为没有人对其进行硬引用。使用弱引用的对象时,优良作法是在不再需要该对象时将硬引用显式设置为null。

加成

这是解决方案的快速实现(仅是提供一个想法):

public class BitmapContainer {    public static class Bitmap {        private final long id;        public Bitmap(long id) { this.id = id; }        public long getId() { return id; }        public void draw() { };    }    WeakHashMap<Bitmap, WeakReference<Bitmap>> myBitmaps        = new WeakHashMap<Bitmap, WeakReference<Bitmap>>();    public void registerBitMap(Bitmap bm) {        if ( bm == null ) throw new NullPointerException();        WeakReference<Bitmap> wr = new WeakReference<Bitmap>(bm);        myBitmaps.put(bm, wr);    }        public Bitmap getBitMap(long id) {        for ( Bitmap item : myBitmaps.keySet() ) { if ( item != null) {     if ( item.getId() == id ) {         return item;     } }        }        return null;    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428392.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号