Android倒計(jì)時(shí)神器(CountDownTimer)
Android倒計(jì)時(shí)神器 - CountDownTimer,供大家參考,具體內(nèi)容如下
啥是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ò)誤。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android Flutter實(shí)現(xiàn)點(diǎn)贊效果的示例代碼
點(diǎn)贊這個(gè)動(dòng)作不得不說在社交、短視頻等App中實(shí)在是太常見了。本文將利用Flutter制作出一個(gè)點(diǎn)贊動(dòng)畫效果,感興趣的小伙伴可以學(xué)習(xí)一下2022-04-04
Android調(diào)用系統(tǒng)攝像頭拍照并顯示在ImageView上
這篇文章主要為大家詳細(xì)介紹了Android調(diào)用系統(tǒng)攝像頭拍照并顯示在ImageView上,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
Android使用OpenGL和MediaCodec錄制功能
OpenGL是一個(gè)跨平臺(tái)的操作GPU的API,但OpenGL需要本地視窗系統(tǒng)進(jìn)行交互,這就需要一個(gè)中間控制層, EGL就是連接OpenGL ES和本地窗口系統(tǒng)的接口,引入EGL就是為了屏蔽不同平臺(tái)上的區(qū)別,這篇文章主要介紹了Android使用OpenGL和MediaCodec錄制功能,需要的朋友可以參考下2025-04-04
Android設(shè)置透明狀態(tài)欄和透明導(dǎo)航欄
本文主要介紹了Android設(shè)置透明狀態(tài)欄和透明導(dǎo)航欄的方法。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03
Android開發(fā):淺談MVP模式應(yīng)用與內(nèi)存泄漏問題解決
本篇文章主要介紹了Android開發(fā):MVP模式應(yīng)用與內(nèi)存泄漏問題解決,具有一定的參考價(jià)值,有需要的可以了解一下。2016-11-11
Android實(shí)現(xiàn)的仿淘寶購物車demo示例
這篇文章主要介紹了Android實(shí)現(xiàn)的仿淘寶購物車demo示例,結(jié)合實(shí)例形式分析了Android購物車的功能、布局及邏輯實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-07-07
Android實(shí)現(xiàn)列表時(shí)間軸
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)列表時(shí)間軸效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Android中實(shí)現(xiàn)ping功能的多種方法詳解
這篇文章主要介紹了Android中實(shí)現(xiàn)ping功能的多種方法詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
Flutter學(xué)習(xí)之Navigator的高級(jí)用法分享
這篇文章主要為大家詳細(xì)介紹了Flutter中之Navigator的高級(jí)用法的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下2023-02-02

