Android驗證碼倒計時--CountDownTimer

601339D8-95AD-409F-98B3-F664DA517AAE.png

首先寫一個類,繼承CountDowmTimer

public class VerificationCountDownTimer extends CountDownTimer

01 構造函數(shù)

    /**
     * 類中的構造函數(shù)
     * @param millisInFuture
     * @param countDownInterval
     */
    public VerificationCountDownTimer(long millisInFuture,long countDownInterval){
        super(millisInFuture, countDownInterval);
    }

  • 兩個參數(shù)(均已毫秒為單位)
    • millisInFuture 倒計的總時間
    • countDownInterval 倒計的時間間隔
  • 以 60s 的倒計時為例??伍茄,如下使用
verificationCountDownTimer = new VerificationCountDownTimer( 60*1000 , 1000)

02 方法

public final void cancel ()

public abstract void onFinish ()

public abstract void onTick (long millisUntilFinished)

public final CountDownTimer start ()

  • cancel() 取消當前任務

  • onFinish() 結束的時候調(diào)用

  • onTick(long millisUntilFinished) 當前任務每完成一次倒計時間間隔時調(diào)用栋盹,直接對UI進行更新

    • 這個方法中的參數(shù)是在倒計時過程中傳入進來的毫秒數(shù),比如倒計時總時間為60秒敷矫,時間間隔為1秒例获,那么這個參數(shù)的傳進來的值依次為:59、58曹仗、57榨汤、56.....1
  • start() 開始當前任務

03 開發(fā)過程中的注意點(敲黑板!敲黑板T趺!)

手機發(fā)送驗證碼需要花費1條短信的費用0.10-0.15元才能獲取驗證碼收壕,平臺當然就希望盡可能多的省錢,所以開發(fā)端就需要設置驗證碼倒計時轨蛤,防止用戶出于有趣或者惡意一直在點擊獲取新驗證碼蜜宪,這樣就大大加重了平臺的運營負擔。所以加上驗證碼倒計時祥山,不僅能防止用戶心急戳戳戳圃验,或因網(wǎng)絡延遲而造成請求堆積,也能幫公司省點小錢缝呕。知道了使用原因澳窑,那就需要考慮一些特殊情形下的處理,比如:

  • 當驗證碼進入倒計時供常,點擊后退摊聋,再重新進入有驗證碼的界面,驗證碼是重新start呢還是繼續(xù)處于前一個驗證碼倒計時狀態(tài)呢栈暇?
    • 解決方法:設置一個檢測量栗精,利用 true 和 false 來進行判斷(在自己寫的類里面,先定義一個檢測量瞻鹏,然后在timerStart 內(nèi)部進行設置)

VerificationCountDownTimer.java

public class VerificationCountDownTimer extends CountDownTimer {


    public static long curMillis =0;
    public static boolean FLAG_FIRST_IN =true;

    /**
     * 類中的構造函數(shù)
     * @param millisInFuture
     * @param countDownInterval
     */
    public VerificationCountDownTimer(long millisInFuture,long countDownInterval){
        super(millisInFuture, countDownInterval);
    }


    /**
     * 當前任務每完成一次倒計時間隔時間時回調(diào)
     * @param millisUntilFinished
     */
    @Override
    public void onTick(long millisUntilFinished) {

    }


    /**
     * 當前任務完成的時候回調(diào)
     */
    @Override
    public void onFinish() {

    }


    public void timerStart(boolean onClick){

        if(onClick) {
            VerificationCountDownTimer.curMillis= System.currentTimeMillis();
        }
        VerificationCountDownTimer.FLAG_FIRST_IN=false;
        this.start();
    }
}

一旦使用 timeeStart的時候悲立,就會將 檢測量設置為 false ,然然后在可以在 另一個Activity中 作為條件 進行判斷使用

RegisterActivity.java 關鍵部分(綁定按鈕的點擊事件)

2C2BE9283E19EF7A38B0D576F4B12FA4.png
  • initCountDownTimer
    • 如果滿足“不是第一次進入” 且 “倒計時時間不為0”的條件的話新博, 啟動 setCountDownTimer 方法薪夕,并將 檢測器 設置為false

衡量“倒計時時間是否為0”的方法

1F69C46766099590DBDDC9DC778E7A6F.png
  • 在點擊Button的時候,啟動的timerStart中赫悄,就將 curMillis 獲取為當前時間原献,所以判斷依據(jù)為:curMillis + 60000 ms 是否大于 當前時間
    • 大于: 啟動 setCountDownTimer馏慨,setCountDownTimer內(nèi)置onTick方法,對獲取得到的剩余時間不斷的進行UI的展示

補充:system.currentTimeMillis() 獲得當前的時間

該方法的作用是返回當前的計算機時間姑隅,單位:毫秒写隶。之前使用new Date()來獲取當前時間,new Date()所做的事情其實就是調(diào)用了System.currentTimeMillis()讲仰。

最終實現(xiàn)的效果圖

1慕趴、 初始界面

Screenshot_2018-01-29-15-46-52-488_cn.abtion.task.png

2、 點擊獲取驗證碼后

Screenshot_2018-01-29-15-48-04-167_cn.abtion.task.png

3鄙陡、 后退其他界面冕房,再次進入,若60s未結束趁矾,則還是處于倒計時中

Screenshot_2018-01-29-15-47-51-090_cn.abtion.task.png

4耙册、 60s 結束,可以點擊 重新獲取 驗證碼

Screenshot_2018-01-29-15-47-58-610_cn.abtion.task.png

5毫捣、 點擊后详拙,再次進入倒計時

Screenshot_2018-01-29-15-46-58-266_cn.abtion.task.png
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蔓同,隨后出現(xiàn)的幾起案子溪厘,更是在濱河造成了極大的恐慌,老刑警劉巖牌柄,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畸悬,死亡現(xiàn)場離奇詭異,居然都是意外死亡珊佣,警方通過查閱死者的電腦和手機蹋宦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咒锻,“玉大人冷冗,你說我怎么就攤上這事』笸В” “怎么了蒿辙?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長滨巴。 經(jīng)常有香客問我思灌,道長,這世上最難降的妖魔是什么恭取? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任泰偿,我火速辦了婚禮,結果婚禮上蜈垮,老公的妹妹穿的比我還像新娘耗跛。我一直安慰自己裕照,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布调塌。 她就那樣靜靜地躺著晋南,像睡著了一般。 火紅的嫁衣襯著肌膚如雪羔砾。 梳的紋絲不亂的頭發(fā)上负间,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音蜒茄,去河邊找鬼唉擂。 笑死餐屎,一個胖子當著我的面吹牛檀葛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腹缩,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼屿聋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了藏鹊?” 一聲冷哼從身側響起润讥,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盘寡,沒想到半個月后楚殿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡竿痰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年脆粥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片影涉。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡变隔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蟹倾,到底是詐尸還是另有隱情匣缘,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布鲜棠,位于F島的核電站肌厨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏豁陆。R本人自食惡果不足惜夏哭,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望献联。 院中可真熱鬧竖配,春花似錦何址、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至胁镐,卻和暖如春偎血,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盯漂。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工颇玷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人就缆。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓帖渠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親竭宰。 傳聞我的和親對象是個殘疾皇子空郊,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容