java.lang.IllegalStateException: TimerTask is scheduled already

来源:互联网 发布:软件项目可行性分析 编辑:程序博客网 时间:2024/06/04 01:16

使用定时器做viewPager轮播图时,遇到了这样的错误:java.lang.IllegalStateException: TimerTask is scheduled already,在网上查了一圈资料发现:


一个TimerTask 通过schedule方法使用之后,不能通过schedule方法调用第二次,想重复使用是不行的,是一次性用品

当你重新想利用这个timertask时,那么你只能重新获得一个实例,最好是写成类:

class MyTask extends TimerTask{@Overridepublic void run(){// TODO Auto-generated method stub//do something}};

那么当你想再使用这个TimerTask时,你可以这么做:

task= new MyTask();timer.schedule(task, 1000);

每一次使用的时候

timer= new Timer();

当然你也可以让这个timer一直存在
那么在重新new task之前,最好调用

task.cancel();
具体实例:
public void initGallery() {
//每隔5秒自动播放        Timer timer = new Timer();        if(myTask != null){            myTask.cancel();        }        myTask = new MyTimeTask();        timer.schedule(myTask,5000,5000);
}
/** * 定时器,实现自动播放 */private MyTimeTask myTask;class MyTimeTask extends TimerTask{    @Override    public void run() {        Message message = new Message();        message.what = 3;        index = myViewPager.getCurrentItem();        index++;        handler.sendMessage(message);    }}
handler中
//轮播图case 3:    myViewPager.setCurrentItem(index);    break;
另外,

对于这种只使用一次的timer,可以在使用完成之后停止它,新建一个timer意味着新建一个线程,不用了就销毁吧。

timer.cancel();timer.purge();timer= null;
                                             
0 0
原创粉丝点击