私はクラスを持っています:
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 ルートにあります) にはターゲット (mypackage.RenderView) への参照があります
Thread は既に終了しているのに、この Thread クラスが Thread への参照を保持している理由がわかりません。何か案は?
EDIT : renderView は、たとえば、アクティビティ B で参照されます。そのため、アクティビティを終了しても、renderThread への参照にはまだ到達できないはずです。しかし、まだ renderThread = null を設定しようとしました: 動作しません。MAT アナライザーで確認できたように、renderView がガベージ コレクションされないようにする唯一のものは、java.lang.Thread からのこの堰参照です。