Timer類的主要作用是設(shè)置計劃任務(wù)孵坚,但封裝任務(wù)的卻是TimerTask類殊轴。
1.Timer.schedule(TimerTask task,Date time):在指定日期執(zhí)行某一次任務(wù)唇跨。
任務(wù)執(zhí)行完進(jìn)程不會銷毀脏款,創(chuàng)建1個Timer就是啟動一個新的線程钮科,該線程不是守護(hù)線程何暮,會一直運行下去。
方案:Timer timer = new Timer(true);//設(shè)置其為守護(hù)線程
2.Timer中允許多個TimerTask任務(wù)
TimerTask是以隊列的方式一個一個執(zhí)行的铐殃,所以預(yù)期的執(zhí)行時間可能和真實的執(zhí)行時間不一樣海洼。可能前面的任務(wù)耗時過長富腊,那么后面的任務(wù)運行時間也會被延后坏逢。
3.Timer.schedule(TimerTask task,Date firstTime,long period):在指定日期之后的間隔周期,無限循環(huán)的執(zhí)行某一個任務(wù)赘被。
ps是整,若計劃時間早于當(dāng)前時間,則立即執(zhí)行task任務(wù)民假。
4.?TimerTask的cancel():將自身從任務(wù)隊列中清楚浮入,其他任務(wù)不受影響。
Timer類的cancel():將任務(wù)隊列中的所有任務(wù)清空羊异。ps事秀,并一定會馬上停止所有任務(wù),原因在于Timer類中的cancel()有時并沒有爭搶到queue鎖野舶,而讓TimerTask類中的任務(wù)繼續(xù)執(zhí)行秽晚。
5.Timer.schedule(TimerTask task,long delay):在當(dāng)前時間的基礎(chǔ)上延遲多長時間執(zhí)行任務(wù)。
6.Timer.schedule(TimerTask task,long delay,long period):在當(dāng)前時間的基礎(chǔ)上延遲多長時間執(zhí)行任務(wù),再以某一時間間隔執(zhí)行任務(wù)筒愚。
7.Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
schedule方法和scheduleAtFixedRate方法都是按順序執(zhí)行的,所以不用擔(dān)心非線程安全的問題菩浙。
schedule方法和scheduleAtFixedRate方法的區(qū)別在于:
schedule不具有追趕性巢掺;
scheduleAtFixedRate具有追趕性,即如果計劃時間早于當(dāng)前時間劲蜻,這個時間段內(nèi)的task會被“補充性”的執(zhí)行下陆淀。
Timer可以用于Android技術(shù)中,實現(xiàn)類似于輪詢先嬉、動畫等功能轧苫。