Android-后台线程垃圾回收

时间:2018-08-24 14:51:23

标签: android

 public class MainActivity extends appCompatActivity{

        private void taskDone()
        {
            System.out.print("done");
        }

        public void startBackgroundThread()
        {
            new Thread()
            {
                @Override
                public void run()
                {
                 MyLongrunnigTas.perform();
                 taskDone();
                }

            }.start();

        }


        //...

当调用startBackgroundThread()时,即使该活动被破坏(例如,由于方向改变),在线程执行后是否仍将被垃圾回收。

否则会导致内存泄漏吗?

1 个答案:

答案 0 :(得分:2)

将根据正常规则对线程进行垃圾回收-当不再有GC根引用该线程时,将对其进行垃圾回收。由于正在运行的线程自动是GC根本身,因此直到线程完成运行后才可以收集该线程。它是否易懂取决于是否有其他变量对其进行引用。在您的示例中,它没有保存在任何地方,直到线程完成,它才符合条件。

对于Activity,由于Thread是一个匿名内部类,因此它将引用其在MainActivity中定义的类。因此,在线程完成运行MainActivity及其所有变量之前,将不会进行垃圾回收。这包括整个View层次结构,因此泄漏很严重。