弱引用对象是静态处理程序中的Garbage Collected

Pra*_*een 3 android weak-references nullpointerexception handler

鉴于代码

 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) {
        ..
        }
 }
}
Run Code Online (Sandbox Code Playgroud)

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

if(target != null {
     // do something
}
Run Code Online (Sandbox Code Playgroud)

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

问题:

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

谢谢.

Cha*_*ake 6

使用对象总是需要作为WeakReference引用的原因是什么?

引用用作缓存,而不是自由访问的对象.一旦GC认为不需要WeakReferences将被擦除,即使它们将被需要.

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

我只是删除WeakReference并将MainActivity存储为完整对象.如果您遇到内存泄漏,请修复内存泄漏,而不是尝试解决它们.