经常会使用到计时的这个功能,在MFC中可以使用SetTimer这个函数,在OnTimer中去作相应的处理。Java中要实现类似的功能,可以使用java.uitl.Timer和java.uitl.TimerTask这两个类。Timer是用来安排任务执行的一个类。它会专门启动一个线程用来安排任务,这个线程你可以设定为守护线程(通过构造函数Timer(boolean isDaemon)来设定 ),调用schedule()这个函数开始执行。 schedule()有很多版本:
① void schedule(TimerTask task, Date when)
在某个时间(when)开始执行TimerTask, 没有重复
② void schedule(TimerTask task, long delay, long period)
在delay毫秒后周期性的执行TimerTask
③ void schedule(TimerTask task, long delay)
在delay毫秒后开始执行TimerTask, 没有重复
④ void schedule (TimerTask task, Date when, long period)
在when这个时间点后周期性的执行TimerTask
如果要取消Timer, 可以调用cancel()方法来取消这个Timer和对应的线程。
TimerTask是任务的执行体,它有一个抽象方法:
public abstract void run();
我们可以继承这个方法,然后在这个方法中去做具体的处理。这两个类结合使用,就可以实现定时的功能。
下面来看看具体的实现:
1、 首先继承TimerTask
class MyTimerTask extends TimerTask
{
private static int nCount = 0;
@Override
public void run()
{
Log.w("==== run ====", "nCount = " + nCount++);
}
@Override
public boolean cancel()
{
mbCanceled = true;
return super.cancel();
}
}
2、 通过Timer执行TimerTask
//新建一个Timer,不设为守护线程
Timer myTimer = new Timer(false);
//开始执行(每一秒执行一次)
myTimer.schedule(new MyTimerTask(), 0l, 1000l);
3、 结束Timer
myTimer.cancel();
//Java也要释放内存(垃圾回收器更快的回收)
myTimer = null;