弱引用对象已在静态处理程序中被垃圾回收



给定代码

 private static class MyHandler extends Handler 
 {
       private final WeakReference<MainActivity> mTarget;
       MyHandler(MainActivity intarget) {
       mTarget = new WeakReference<MainActivity>(intarget);
 }
 @Override
 public void handleMessage(Message msg) 
 {
       MainActivity target = mTarget.get();  // target becomes null will causes null      pointer exception
       switch (msg.what) {
        ..
        }
 }
}

为了避免NullPoinetrException,我可以使用:

if(target != null {
     // do something
}

但是当目标变为空时,我无法在应用程序中继续前进。

问题:

当目标变为空并继续前进时,有没有办法取回目标,或者我应该完成活动或应用程序?

谢谢。

使用一个

你总是需要引用的对象作为弱引用背后的原因是什么?

引用用作缓存,而不是可自由访问的对象。一旦 GC 认为不需要弱引用,即使需要它们,也会立即擦除弱引用。

此外,弱引用永远不会变为空。它的内容可能会变为 null,但引用本身仍将是有效的弱引用。它将为空,但不是空。空对象和空对象之间存在区别:空对象仍在内存中分配。

我只是删除弱引用并将主活动存储为完整对象。如果出现内存泄漏,请修复内存泄漏,而不是尝试解决它们。

请阅读WeakReference概述。直接指出,将尽快收集周参考下的对象。

因此,您必须使用通常的参考,否则SoftReference

相关内容

最新更新