抱歉我的英语不好。我有计时器,如果我单击计时器打开,如果我再次单击计时器关闭。但我的计时器只开了一次。如果我再次点击(关闭计时器),我会遇到这样的异常:
E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.IllegalStateException: Timer was canceled
at java.util.Timer.scheduleImpl(Timer.java:561)
at java.util.Timer.schedule(Timer.java:481)
at installation.ConnectDevice.callAsynchronousTask(ConnectDevice.java:211)
at installation.ConnectDevice$1.onClick(ConnectDevice.java:153)
at android.view.View.performClick(View.java:4240)
...
我不知道为什么它不起作用,请帮忙。低于我的类(class)
我的类(class)
private Timer timer;
int time = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.i_connect_device);
timer = new Timer();
// my botton
includeDevice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (time < 1) {
callAsynchronousTask();
time++;
}
if (time > 0) {
stopTimer();
time--;
}
}
});
}
public void callAsynchronousTask() {
final Handler handler = new Handler();
TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
try {
Log.e("Timer is work", "Timer is work");
// GetMsgs performBackgroundTask = new GetMsgs();
// PerformBackgroundTask this class is the class
// that extends AsynchTask
// performBackgroundTask.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
}
};
timer.schedule(doAsynchronousTask, 0, 1000 * 10); // execute in every
// 50000 ms
}
public void stopTimer() {
timer.cancel();
}
最佳答案
按如下方式更改 onClick 逻辑(因为在您的情况下,第一次只执行 callAsynchronousTask() 和 stopTimer()。因此它会在下一次 onClick 时引发异常)
btnTimer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (time == 0) {
callAsynchronousTask();
time = 1;
} else {
stopTimer();
time = 0;
}
}
});
和 doAsynchronousTask 将其作为字段并在 stopTimer() 上取消任务。
public void stopTimer() {
doAsynchronousTask.cancel();
}
然后就可以正常工作了。
关于java - 停止和启动计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31263573/