我写了一些计时器。并且我想在单击开始按钮后在textview
中显示它。
我做了什么。
每次我
timer = new Thread(new Runnable() {
@Override
public void run() {
while (!stopedButton ) {
time = "";
if (timerMinutes >= 60) {
timerMinutes = 0;
timerHours++;
}
if (timerHours < 10)
time = "0" + String.valueOf(timerHours) + ":";
else
time = String.valueOf(timerHours) + ":";
if (timerMinutes < 10)
time += "0" + String.valueOf(timerMinutes);
else
time += String.valueOf(timerMinutes);
runOnUiThread(new Runnable() {
public void run() {
if (!stopedButton) {
mTimeFromStartValue.setText(time);
timerMinutes++;
} else {
timerMinutes = 0;
timerHours = 0;
}
}
});
Log.e(TAG, ""+timerHours);
Log.e(TAG, ""+timerMinutes);
Log.e(TAG, time);
try {
Thread.sleep(1 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
所以它工作正常,但每次停止后再开始,经过多次我的计时器开始快速工作。我试图避免这种情况,我认为我不需要每次都创建新的计时器。但是我也需要在停止启动后有工作计时器。
我写了一些这样的代码:
if(timer.isAlive()){
timer.resume();
}else{
timer.start();
}
但我有这个例外:java.lang.IllegalThreadStateException: Thread already started
那怎么解决这个问题?
答案 0 :(得分:0)
您需要创建新的Thread
实例才能启动新线程。您还需要使用interrupt()
类的Thread
方法。
使用此代码完成您的主题:
@Override
public void run() {
while (true) {
// Your code here
if(isInterrupted ()){
return;
}
}
}
单击停止按钮时使用此代码:
timer.interrupt();
timer.join();