我在java / Android中有一个这样的线程:
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
update_i();
}
};
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Thread myThread = new Thread(new Runnable() {
public void run() {
while (true) {
try {
handler.sendMessage(handler.obtainMessage());
Thread.sleep(timer);
} catch (Throwable t) {
}
}
}
});
myThread.start();
}
当我运行我的应用程序时,该线程正常工作。但我想用一个按钮启动/重启线程。
Button.OnClickListener StartButtonOnClickListener = new Button.OnClickListener() {
@Override
public void onClick(View v) {
//start/restart the thread
}
};
如果我将线程复制到按钮中,我每次用户点击按钮时都会创建一个新线程。我希望在用户第一次单击按钮时运行该线程,“kill it”并从头开始,如果用户第二次单击该按钮(我不想启动第二个线程)。
答案 0 :(得分:12)
我认为Colin是wright你不能重新启动你需要创建一个新实例,如果中断函数仍在运行,则中断函数将停止正在运行的线程。
我建议你创建一个内联类,内联实现的instand,它会使它更容易理解。
if(myThread.isAlive()){
myThread.interrupt();
}
myThread = new MyThread();
myThread.start();
希望这会有所帮助
答案 1 :(得分:5)
您无法重新启动线程。
来自文档:
Throws IllegalThreadStateException
if the Thread has been started before
你可以杀死以前的线程,但最后你必须创建你的线程的第二个实例。
资源: