我有一堂课:
class RenderView implements Runnable {
Thread renderThread;
public void run() {
while(!Thread.currentThread().isInterrupted()) {
//does some work
}
}
//At some point in executed code, inside RenderView class (i'm sure it's executed)
renderThread = new Thread (this);
//When activity is closed (also, i'm sure this part is executed)
renderThread.interrupt();
并且 renderThread 真的停止了(至少 run() 方法退出了)。
但是由于某种原因,在我退出活动后,我的代码中仍然有一些对 renderView 的引用。这导致我出现巨大的内存泄漏。
一个 hprof 转储告诉我:java.lang.Thread(这个在 GC Root 中)有一个对目标的引用(mypackage.RenderView)
我不知道为什么这个 Thread 类保留对我的 Thread 的引用,即使我已经完成了 Thread!有任何想法吗?
编辑:在活动 B 中引用了 renderView。因此,当我退出活动时,应该仍然无法访问对 renderThread 的引用。但我仍然尝试设置 renderThread = null :不起作用。正如我能够通过 MAT Analyzer 发现的那样,使 renderView 不会被垃圾收集的唯一因素是来自 java.lang.Thread 的这个奇怪的引用。