Timer類(lèi)的主要作用是設(shè)置計(jì)劃任務(wù),但封裝任務(wù)的卻是TimerTask類(lèi)。
1.Timer.schedule(TimerTask task,Date time):在指定日期執(zhí)行某一次任務(wù)。
任務(wù)執(zhí)行完進(jìn)程不會(huì)銷(xiāo)毀,創(chuàng)建1個(gè)Timer就是啟動(dòng)一個(gè)新的線程,該線程不是守護(hù)線程,會(huì)一直運(yùn)行下去。
方案:Timer timer = new Timer(true);//設(shè)置其為守護(hù)線程
2.Timer中允許多個(gè)TimerTask任務(wù)
TimerTask是以隊(duì)列的方式一個(gè)一個(gè)執(zhí)行的,所以預(yù)期的執(zhí)行時(shí)間可能和真實(shí)的執(zhí)行時(shí)間不一樣??赡芮懊娴娜蝿?wù)耗時(shí)過(guò)長(zhǎng),那么后面的任務(wù)運(yùn)行時(shí)間也會(huì)被延后。
3.Timer.schedule(TimerTask task,Date firstTime,long period):在指定日期之后的間隔周期,無(wú)限循環(huán)的執(zhí)行某一個(gè)任務(wù)。
ps,若計(jì)劃時(shí)間早于當(dāng)前時(shí)間,則立即執(zhí)行task任務(wù)。
4.?TimerTask的cancel():將自身從任務(wù)隊(duì)列中清楚,其他任務(wù)不受影響。
Timer類(lèi)的cancel():將任務(wù)隊(duì)列中的所有任務(wù)清空。ps,并一定會(huì)馬上停止所有任務(wù),原因在于Timer類(lèi)中的cancel()有時(shí)并沒(méi)有爭(zhēng)搶到queue鎖,而讓TimerTask類(lèi)中的任務(wù)繼續(xù)執(zhí)行。
5.Timer.schedule(TimerTask task,long delay):在當(dāng)前時(shí)間的基礎(chǔ)上延遲多長(zhǎng)時(shí)間執(zhí)行任務(wù)。
6.Timer.schedule(TimerTask task,long delay,long period):在當(dāng)前時(shí)間的基礎(chǔ)上延遲多長(zhǎng)時(shí)間執(zhí)行任務(wù),再以某一時(shí)間間隔執(zhí)行任務(wù)。
7.Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
schedule方法和scheduleAtFixedRate方法都是按順序執(zhí)行的,所以不用擔(dān)心非線程安全的問(wèn)題。
schedule方法和scheduleAtFixedRate方法的區(qū)別在于:
schedule不具有追趕性;
scheduleAtFixedRate具有追趕性,即如果計(jì)劃時(shí)間早于當(dāng)前時(shí)間,這個(gè)時(shí)間段內(nèi)的task會(huì)被“補(bǔ)充性”的執(zhí)行下。
Timer可以用于Android技術(shù)中,實(shí)現(xiàn)類(lèi)似于輪詢(xún)、動(dòng)畫(huà)等功能。