【发布时间】:2012-07-20 23:38:29
【问题描述】:
我有一堂课:
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!有什么想法吗?
编辑:在 Activity B 中引用了 renderView。因此,当我退出 Activity 时,应该仍然无法访问对 renderThread 的引用。但我仍然尝试设置 renderThread = null :不起作用。正如我通过 MAT Analyzer 发现的那样,让 renderView 不被垃圾收集的唯一原因是 java.lang.Thread 的这个奇怪的引用。
【问题讨论】:
-
Android 中的解决方案是不管理线程。在 runOnUIThread 上使用 AsyncTask 应该适用于大多数情况。
-
但是如果您发现了这些不起作用的特殊情况,请详细说明。
标签: java android memory-management