java.lang.IllegalStateException: TimerTask is scheduled already问题分析
想用一个timer去定时的机制,所以先添加了一个TimerTask
TimerTask task = new TimerTask(){
public void run() {
Log.d("auth","timer on schedule");
mCb.OnCallback("TIMEOUT", mRes);
timer.cancel();
}
};
然后在需要调用的地方使用
timer = new Timer();
timer.schedule(task,delay);
设定相对应的timer和delay时间的长短。然后发现一个问题就是在第二次调用timer.schedule(task,delay);的时候就会报java.lang.IllegalStateException: TimerTask is scheduled already的错误,然后系统崩溃,退出。
在网络上查找了一些相关内容,得出一个结论,TimerTask是一次性的,用完了就得扔,要用的话需要重新new一个新的TimerTask出来,遂改成:
class RequestTimerTask extends TimerTask {
public void run() {
Log.d(TAG,"timer on schedule");
timer.cancel();
}
}
然后再去定义个Timer,在每次需要定时的地方使用
timer = new Timer();
timer.schedule(new RequestTimerTask(),8000);
这样就正常了。
Timer使用的异常:java.lang.IllegalStateException: Timer was canceled
1 异常日志:
java.lang.IllegalStateException: Timer was canceled
2 所做操作:
调用cancel()取消后不能再执行 schedule语句,否则提示出现以上异常。
3 解决方案:
正确的中止Timer方法:
timer.cancel();
timer.purge();
timer = null;(可选)