我从一个帖子中调用了以下函数:
Thread Move = new Thread(){
public void run()
{
while(ButtonDown){
UpdateValues();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Move.start();
Android会在while循环中断时删除该线程,还是必须以某种方式删除它?
答案 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或封闭类的对象是垃圾收集。