I have some location finding code and while I'm waiting for a read of an appropriate accuracy I'd also like to have a timeout and use whatever the best location read is up to that point.
I seem to be misunderstanding how to cancel and restart a timer.
I want to start a timeout timer when I begin my search and restart the timer every time I repeat my search...
private void refreshLocation() {
if (locationTimeoutTimer != null) {
locationTimeoutTimer.cancel();
locationTimeoutTimer.purge();
}
locationTimeoutTimer = new Timer();
locationTimeoutTimer.schedule(timeoutReached, 60000);
//Do other things...
}
However, I get the following error whenever this refreshLocation is called a second time.
java.lang.IllegalStateException: TimerTask is scheduled already
解决方案
Your code is very similar to code I have - that is working. But some differences I notice are that
you may need to create the new timer as a named daemon - for example locationTimer = new Timer("locationtimer", true);
you may need to create a new TimerTask each time you schedule (I assume timeoutReached is the TimerTask?) - for example locationTimer.schedule(new timeoutReached(), 60000);