java - 弱引用移除时的回调

标签 java android weak-references

有没有办法在弱引用被删除时得到提醒?我需要将一个 Android 上下文添加到一个实例,我将其添加为一个 WeakReference 然后我想在/如果它被删除时处理一些事情?我想我在某个地方读到过这个,但是因为我不记得在哪里搜索它没有给我任何东西:(

最佳答案

弱引用 (wr) 不提供回调。如果您需要适当的回调,可以重写对象的 finalize 方法以在它被垃圾收集 (gc'd) 时执行某些操作。

wr 提供的是一个 referenceQueue (rq),它基本上是一个引用列表,其引用对象还没有被 gc'd。您在引用的构造函数中附加一个 referenceQueue。

    ReferenceQueue<Drawable> rq = new ReferenceQueue<Drawable>();
    WeakReference<Drawable> wr = new WeakReference<Drawable>(dr, rq);

一旦我们的 drawable 被 gc,referenceQueue 应该包含 wr.

    do{
        Reference<?> ref =  rq.poll();  //this should be your weak reference
        if(ref == null) break;

        ref.get();  //Should always be null, cause referent is gc'd

        // do something

    }while(true);

我们可能将 wr 放在一个映射中,因为当我们从 rq 取回它时,我们没有任何方法来判断“wr”是什么——毕竟它的引用是空的。它唯一的意义是它所指的,它不再存在了,所以我们需要一个这种意义的记录,所以我们把它放在 map 上,键入我们想采取的一些行动,甚至可能只是从 map 中删除弱引用本身。

关于java - 弱引用移除时的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22114436/

相关文章:

Java:我可以在 HashMap 中使用数组吗?

java - 通用 Put 或 Post 不支持的媒体类型 (415)

android - 在 eclipse (localhost) 上调试 Android(客户端 - 在物理智能手机设备中)和 tomcat(服务器)

javascript - 如何使用 Javascript 获取 'css-pixel'(媒体查询)宽度?

java - 匹配正则表达式模式时如何忽略变音符号?

java - 当对象持有对正在运行的线程的引用时,该对象是否有资格进行垃圾回收?

java - Spring BeanCurrentlyInCreationException

java - Struts2:如何在 webapp 之外存储图像并将其路径保存到数据库?

wpf - 约什·史密斯 (Josh Smith) 的 RelayCommand 实现是否存在缺陷?

swift - 实现跳过 WeakSet 中的 nil 元素的自定义迭代器