Android weakreference对象已在静态处理程序中被垃圾收集

Android weakreference对象已在静态处理程序中被垃圾收集,android,nullpointerexception,handler,weak-references,Android,Nullpointerexception,Handler,Weak References,给定代码 private static class MyHandler extends Handler { private final WeakReference<MainActivity> mTarget; MyHandler(MainActivity intarget) { mTarget = new WeakReference<MainActivity>(intarget); } @Override publi

给定代码

 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) {
        ..
        }
 }
}
但当target变为null时,我无法在应用程序中继续

问题是:

当目标变为空时,是否有任何方法返回目标并继续,或者我是否应该完成活动或应用程序


谢谢。

使用您始终需要引用的对象作为WeakReference的原因是什么

引用用作缓存,而不是自由访问的对象。一旦GC认为不需要weakreference,即使它们将被需要,它们也会被删除

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

我只是删除WeakReference并将MainActivity存储为完整对象。如果出现内存泄漏,请修复内存泄漏,而不要试图解决它们。

请阅读
WeakReference
。直接指出将尽快收集周引用下的对象


因此,您必须使用常规引用,或
SoftReference

@santirivera92来避免内存泄漏。正如Romain Guy在本文中所描述的,我使用了weakReference。软引用的行为不需要与WeakReference有任何不同,但软引用会一直存在,直到内存变低。那么,使用强引用是否更好?如何检查是否存在内存泄漏?
if(target != null {
     // do something
}