1. 程式人生 > 程式設計 >Android倒計時神器(CountDownTimer)

Android倒計時神器(CountDownTimer)

Android倒計時神器 - CountDownTimer,供大家參考,具體內容如下

啥是CountDownTimer?​

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

原始碼

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();
}

建構函式:

兩個引數,第一個是總的倒計時時間,第二個是倒計時間隔。比如1秒跳一次該引數就為1000,兩個引數的單位都為毫秒。

start():

呼叫該方法以啟動計時器。

cancel():

呼叫該方法以釋放計時器。

重要!一定要在onDestory等回撥中cancel()計時器,否則會因為頁面被回收計時器還在運作而出現空指標錯誤!

回撥方法:

onTick():

每個時間間隔會回撥一次,比如設定了1000ms的間隔,就會每1000ms回撥一次這個方法。

onFinish():

在整個計時器結束之後回撥。

使用中的一些坑

計時不準的問題

雖然這個工具有針對延遲做了處理,但是因為一些其他原因,導致CountDownTimer開始計時的時候極有可能不從你設定的總時長開始計時。比如你設定的millsInFuture是30000(30s),CountDownTimer其實是從29xxx開始計時的,這樣會導致一些Text的UI顯示快一秒。解決辦法就是在構造的時候就傳入一個比30000大一些的數,比如30300.

記憶體洩漏/空指標問題

CDT內部其實是對Handler有做一個封裝,所以一定一定要在回收的時候呼叫Timer的cnacel()方法,否則容易出現空指標錯誤。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。