我想完成Thread。 ProgressBar
进度为0,单击按钮时线程将关闭。我使用了destroy()
,stop()
,resume()
,interrupt()
,但无效。我怎么能完成Thread?
class TIME implements Runnable {
@Override
public void run() {
for (int i=0; i<10; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
@Override
public void run() {
progressBar.setProgress(i);
if(i==9){Log.i("Log","Time's Up!");}
}
});
}
}
}
onCreate()中的new Thread(new TIME()).start();
ProgressBar progressBar=(ProgressBar)findViewById(R.id.progressBar1);
progressBar.setMax(2000);
Button bt=(Button)findViewById(R.id.button1);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//TIME thread will finish. And progressBar.setProgress(0);
}
});
答案 0 :(得分:2)
如果你的意思是线程希望自己完成 - 只需退出其运行功能,系统就会将其清理干净。如果你的意思是想要从另一个线程中退出它 - 你不能直接这样做,因为它是一个非常不安全的操作,你永远不知道当时线程正在做什么,以及它是否可能导致资源泄漏或留下数据处于糟糕的状态。相反,你取消()线程,并且线程应该偶尔查看并查看isCanceled()是否为真,如果是,则退出其运行函数,如上所述。
答案 1 :(得分:2)
答案 2 :(得分:1)
我想我知道你想要实现的目标 - 但正如其他人之前所说的那样,你的编码技术有点模糊且难以理解。我想你想要一个线程运行,并能够在某个时候停止线程。这通常以这种方式完成:
class TIME implements Runnable {
private volatile boolean isRunning = true;
@Override
public void run() {
while (isRunning){
// do some work here
}
}
public void killMe(){
isRunning=false;
}
}