使用定时器做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;
本文介绍了解决ViewPager轮播图定时器复用时遇到的问题,即如何避免java.lang.IllegalStateException: TimerTask is scheduled already错误的发生,并提供了具体的代码示例。
542

被折叠的 条评论
为什么被折叠?



