溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android中如何使用CountDownTimer實(shí)現(xiàn)倒計(jì)時(shí)

發(fā)布時(shí)間:2022-04-18 14:09:11 來源:億速云 閱讀:182 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“Android中如何使用CountDownTimer實(shí)現(xiàn)倒計(jì)時(shí)”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Android中如何使用CountDownTimer實(shí)現(xiàn)倒計(jì)時(shí)”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

啥是CountDownTimer?

CountDownTimer是Andorid.os包下一個(gè)谷歌為我們封裝好的一個(gè)倒計(jì)時(shí)工具。我們嗎、平時(shí)開發(fā)過程中像一些驗(yàn)證碼、倒計(jì)時(shí)的功能,如果自己封裝一個(gè)倒計(jì)時(shí)工具就會(huì)稍顯麻煩。而谷歌這個(gè)工具使用起來非常方便。

源碼

package android.os;

public abstract class CountDownTimer {
 public CountDownTimer(long millisInFuture, long countDownInterval) {
 throw new RuntimeException("Stub!");
 }

 public final synchronized void cancel() {
 throw new RuntimeException("Stub!");
 }

 public final synchronized CountDownTimer start() {
 throw new RuntimeException("Stub!");
 }

 public abstract void onTick(long var1);

 public abstract void onFinish();
}

構(gòu)造函數(shù):

兩個(gè)參數(shù),第一個(gè)是總的倒計(jì)時(shí)時(shí)間,第二個(gè)是倒計(jì)時(shí)間隔。比如1秒跳一次該參數(shù)就為1000,兩個(gè)參數(shù)的單位都為毫秒。

start():

調(diào)用該方法以啟動(dòng)計(jì)時(shí)器。

cancel():

調(diào)用該方法以釋放計(jì)時(shí)器。

重要!一定要在onDestory等回調(diào)中cancel()計(jì)時(shí)器,否則會(huì)因?yàn)轫撁姹换厥沼?jì)時(shí)器還在運(yùn)作而出現(xiàn)空指針錯(cuò)誤!

回調(diào)方法:

onTick():

每個(gè)時(shí)間間隔會(huì)回調(diào)一次,比如設(shè)置了1000ms的間隔,就會(huì)每1000ms回調(diào)一次這個(gè)方法。

onFinish():

在整個(gè)計(jì)時(shí)器結(jié)束之后回調(diào)。

使用中的一些坑

計(jì)時(shí)不準(zhǔn)的問題

雖然這個(gè)工具有針對(duì)延遲做了處理,但是因?yàn)橐恍┢渌颍瑢?dǎo)致CountDownTimer開始計(jì)時(shí)的時(shí)候極有可能不從你設(shè)定的總時(shí)長開始計(jì)時(shí)。比如你設(shè)定的millsInFuture是30000(30s),CountDownTimer其實(shí)是從29xxx開始計(jì)時(shí)的,這樣會(huì)導(dǎo)致一些Text的UI顯示快一秒。解決辦法就是在構(gòu)造的時(shí)候就傳入一個(gè)比30000大一些的數(shù),比如30300.

內(nèi)存泄漏/空指針問題

CDT內(nèi)部其實(shí)是對(duì)Handler有做一個(gè)封裝,所以一定一定要在回收的時(shí)候調(diào)用Timer的cnacel()方法,否則容易出現(xiàn)空指針錯(cuò)誤。

讀到這里,這篇“Android中如何使用CountDownTimer實(shí)現(xiàn)倒計(jì)時(shí)”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI