我有Thrad和Handler:
Handler handler = new Handler() {
@Override
public void handleMessage(android.os.Message msg) {
super.handleMessage(msg);
//do somethink
}
};
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
//do somethink
msg.obj = 1;
handler.sendMessage(msg);
thread.interrupt();
}
});
当应用开始时,第一次 thread.start(); 一切正常。 但是当我尝试从按钮开始第二次 thread.start(); 时:
E / MessageQueue-JNI:java.lang.IllegalThreadStateException:线程已经启动。
答案 0 :(得分:36)
您应该在启动之前检查该线程的状态。
if (thread.getState() == Thread.State.NEW)
{
thread.start();
}
答案 1 :(得分:5)
创建一个线程不是一个好主意。 您必须检查线程是否已经启动。如果线程尚未开始
if(!thread.isAlive()){
thread.start();
}
更好的想法是创建新线程实例。
答案 2 :(得分:0)
在run()结束时,你的线程死了。如果你想让它保持活动状态,那么在线程中添加一个阻塞队列,并使run()成为一个从队列中读取的大循环。不是为每条消息调用start,而是将其添加到队列中。
当然,您仍需要调用start()一次(当您的程序初始化时)。