java.lang.IllegalStateException: TimerTask is scheduled already

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


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

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

class MyTask extends TimerTask{
	@Override
	public 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值