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再執行,後面繼續進行週期性任務。