可以在线程中设置Looper导致java内存泄漏吗?

时间:2017-01-05 18:12:00

标签: java android multithreading memory-leaks

假设我有一个如此定义的线程:

public class MyThread extends Thread {

    Looper someLooper;

    public void setLooper(Looper looper){
      someLooper= looper;
    }

    @Override
    public void run() {
        System.out.println("MyThread - START "+Thread.currentThread().getName());
  System.out.println("mylooper:"+someLooper.toString());

        }
    }
}

现在,让我们说在mainThread活动屏幕中我这样做:

MyThread t = new MyThread();
t.setLooper(Looper.getMainLooper());
t.start();

由于Looper在子线程中被永久引用,这会是内存泄漏吗? GC是否能够从mainThread活动中收集内存,还是必须等到looper被释放?我认为它不会是内存泄漏,因为looper与线程相关联,而不是与活动上下文相关联。我需要确认。

1 个答案:

答案 0 :(得分:1)

只要您的应用程序正在运行,主线程就永远不会结束,所以不会泄漏任何内存。 Looper中没有对Activity的引用 - 至少不是直接引用(添加到Looper的消息可能引用了Activity,但这是另一回事,如果它们有很长的延迟,那只是一个问题。)