在线程中设置活套会导致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没有任何影响。