给定代码
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
。