假设我有一个如此定义的线程:
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与线程相关联,而不是与活动上下文相关联。我需要确认。
答案 0 :(得分:1)
只要您的应用程序正在运行,主线程就永远不会结束,所以不会泄漏任何内存。 Looper中没有对Activity的引用 - 至少不是直接引用(添加到Looper的消息可能引用了Activity,但这是另一回事,如果它们有很长的延迟,那只是一个问题。)