博主最近在改被人的项目,准备写一个类似今日头条的加载完成提示,就写了个计时器让它显示几秒,于是就用到了timer这个计时器控件,简单的正常代码如下,因为博主的加载需要多次,当timer二次调用的时候就出现了java.lang.IllegalStateException: TimerTask is scheduled already异常,于是苦恼了老半天,不知道为什么,每次刷新的时候我哦重新给timer 创建新对象或者cancel()都还是报这个异常,正常的timer代码如下
Timer timer = new Timer();
private int tips_time= 20;
public void tipsStart() {
timer .schedule(taskTips, 1000, 1000); // timeTask
}
final Handler handlerTips = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
if (tips_time < 0) {
timerTipS.cancel();
}
}
}
};
TimerTask taskTips = new TimerTask() {
@Override
public void run() {
tips_time--;
Message message = new Message();
message.what = 1;
handlerTips.sendMessage(message);
}
};
然后楼主翻阅了很多资料才发现,只要timer这个控件第二次调用就会出现出现这个异常,解决办法如下,自定义一个类集成TimerTask即可
class RequestTimerTask extends TimerTask {
public void run() {
tips_time--;
Message message = new Message();
message.what = 1;
handlerTips.sendMessage(message);
}
}
然后把
timer .schedule(taskTips, 1000, 1000);
中的taskTips改成 new RequestTimerTask();即可,完美解决!
---------------------
作者:青穗CherishTang
来源:CSDN
原文:https://blog.csdn.net/fzkf9225/article/details/71079592
版权声明:本文为博主原创文章,转载请附上博文链接!