Java中用Timer和TimerTask实现周期性任务或者定时(延时)执行任务,一般形式如下:
// 声明一个类继承自TimerTask private class TimerTask1 extends TimerTask { int p = 1; @Override public void run() { // TODO Auto-generated method stub handler.post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }); } }由此看出TimerTask类本身就是一个线程类,因此Timer&TimerTask所完成的任务都为多线程的。
由此可以想到在Android开发中可以配合Handler使用。
用Timer启动TimerTask的形式:Timer的schedule方法。6种重载:
Timer timer = new Timer(); timer.schedule(task, when); // 1 timer.schedule(task, delay); // 2 timer.schedule(task, when, period); // 3 timer.schedule(task, delay, period); // 4 timer.scheduleAtFixedRate(task, when, period); // 5 timer.scheduleAtFixedRate(task, delay, period); // 6
1. 定时启动任务
2. 延时启动任务
3. 定时周期任务
4. 延时周期任务
5. 定时周期任务(固定频率)
6. 延时周期任务(固定频率)
注:schedule 与 scheduleAtFixedRate 的区别在于当你设置的开始时间小于当前时间时,举个例子:
假如当前是16:55,而你定的开始时间是16:52,延时都是2分钟。
此时你如果用schedule方法,那么任务快速执行一次之后会以当前时间为开始时间,然后以2分钟为时间间隔执行周期任务。
此时你如果用scheduleAtFixedRate方法,那么任务依然以16:52为开始时间,然后马上执行1次(16:54 的那次1次),随后在16:56再执行,后面继续进行周期性任务。