在线程中设置活套会导致java内存泄漏吗?
假设我有一个这样定义的线程:在线程中设置活套会导致java内存泄漏吗?,java,android,multithreading,memory-leaks,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.curr
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());
}
}
}
现在,让我们假设在主线程活动屏幕中,我执行以下操作:
MyThread t = new MyThread();
t.setLooper(Looper.getMainLooper());
t.start();
由于活套在子线程中被永久引用,这会是内存泄漏吗?GC是否能够从主线程活动中收集内存,还是必须等待直到释放循环器?我认为这不会是内存泄漏,因为循环器与线程关联,而不是活动上下文。我需要确认一下 只要你的应用还在运行,主线程就不会结束,因此不会泄漏任何内存。Looper中没有对活动的引用-至少没有直接引用(添加到Looper的消息可能有对活动的引用,但这是另一回事,只有当它们有很长的延迟时才是真正的问题)。只要你的应用程序在运行,主线程就不会结束,因此不会泄漏任何内存。Looper中没有对活动的引用-至少没有直接引用(添加到Looper的消息可能有对活动的引用,但这是另一回事,只有当它们有很长的延迟时才是真正的问题)。对象是否符合垃圾收集条件取决于谁持有对该对象的引用,该对象没有引用的其他对象。因此,
MyThread
的someLooper
成员的值对该线程是否符合GC的条件没有任何影响。对象是否符合垃圾收集的条件取决于谁持有对该对象的引用,而不是该对象持有对哪些其他对象的引用。因此,MyThread
的someLooper
成员的值对该线程是否符合GC没有任何影响。