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

来源:互联网 发布:多益网络登录器 编辑:程序博客网 时间:2024/05/22 08:47

博主最近在改被人的项目,准备写一个类似今日头条的加载完成提示,就写了个计时器让它显示几秒,于是就用到了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();即可,完美解决!

0 0
原创粉丝点击