我是否必须在Android中删除线程

时间:2012-03-23 19:16:22

标签: android multithreading

我从一个帖子中调用了以下函数:

        Thread Move = new Thread(){
            public void run()
            {
                while(ButtonDown){
                    UpdateValues();
                    try {
                        Thread.sleep(50);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        Move.start();

Android会在while循环中断时删除该线程,还是必须以某种方式删除它?

2 个答案:

答案 0 :(得分:2)

当你从线程返回时,你基本上已经停止了它,所以不,你不需要做任何特定的删除线程。请记住,这不是Android中线程的一个很好的用例。如果您要从非UI线程更新UI,您很可能会让框架抱怨您。相反,您应该阅读有关AsyncTask的一些教程并转到该模型,因为让您更新UI。

答案 1 :(得分:2)

这里有两个概念。一个是线程本身,即处理器中运行的东西,它具有堆栈内存。另一个是Thread对象,它基本上是一个访问线程的控制面板。

该线程具有堆栈内存,当线程终止(run()完成或抛出异常时),该内存基本上被释放。但是,Thread java对象会一直存在,直到不再引用它为止。

所以,让我们说你有这个:

this.myThread = new Thread(){
            public void run()
            {
                int[] takeUpSomeMemory = new int[10000];

                while(ButtonDown){
                    UpdateValues();
                    try {
                        Thread.sleep(50);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
this.myThread.start();

所以你有一个实例变量myThread,它包含你创建的Thread的引用。调用start方法时,会调用您的线程,并为变量takeUpSomeMemory分配相当多的内存。 run()方法通过完成执行或抛出异常而死亡后,takeUpSomeMemory的内存被垃圾回收。 this.myThread的内存将保留,直到设置了instanceVariable为止nil或封闭类的对象是垃圾收集。