有没有办法在弱引用被删除时得到提醒?我需要将一个 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/