关于Timer计时器控件的java.lang.IllegalStateException: TimerTask is scheduled already问题分析

博主最近在改被人的项目,准备写一个类似今日头条的加载完成提示,就写了个计时器让它显示几秒,于是就用到了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 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/Crystal_xing/article/details/83537024
今日推荐