一、CountDownTimer簡介
CountDownTimer是Android系統提供的一個用於倒計時的工具類。它可以設置倒計時的總時間以及每隔一定時間間隔回調一個onTick()方法,在這個方法中可以更新UI。倒計時結束後會回調onFinish()方法,可以在這個方法中做一些善後工作。
下面是一個簡單的CountDownTimer的使用示例:
new CountDownTimer(60000, 1000) { public void onTick(long millisUntilFinished) { mTextView.setText("倒計時:" + millisUntilFinished / 1000 + "秒"); } public void onFinish() { mTextView.setText("倒計時結束"); } }.start();
這個示例中,我們設置總時間為60秒,每隔1秒回調一次onTick()方法,更新TextView的倒計時顯示。倒計時結束後會回調onFinish()方法,更新TextView的文本為“倒計時結束”。
二、CountDownTimer的參數詳解
CountDownTimer的構造方法有兩個參數,第一個參數是倒計時的總時間,單位為毫秒;第二個參數表示倒計時的時間間隔,同樣單位為毫秒。這兩個參數可以通過set方法進行修改。以下是CountDownTimer的四個方法:
1、onTick(long millisUntilFinished):每次倒計時間隔結束時回調,參數millisUntilFinished表示倒計時剩餘的時間,單位為毫秒。
2、onFinish():倒計時結束時回調。
3、cancel():取消倒計時。
4、start():開始或恢復倒計時。
可以通過以下代碼設置倒計時總時間和時間間隔:
CountDownTimer countDownTimer = new CountDownTimer(60000, 1000) { public void onTick(long millisUntilFinished) { // do something } public void onFinish() { // do something } }; countDownTimer.start(); // 開始倒計時 countDownTimer.cancel(); // 取消倒計時 countDownTimer.onTick(30000); // 設置倒計時時間為30秒 countDownTimer.onTick(5000); // 設置倒計時時間為5秒
三、CountDownTimer的注意事項
1、CountDownTimer不是線程安全的,不能在多個線程中共享。
2、CountDownTimer默認在UI線程中執行,因此不能在onTick()和onFinish()方法中進行耗時操作,會導致ANR。
3、CountDownTimer倒計時結束後不會自行停止,需要手動調用cancel()方法停止倒計時,並且不能再次調用start()方法,否則會拋出IllegalStateException異常。
四、實例應用:驗證碼倒計時
驗證碼倒計時功能是很多手機應用中常見的功能,下面通過實例來演示如何使用CountDownTimer實現驗證碼倒計時功能。
首先,在xml布局文件中添加一個Button控件,用於顯示獲取驗證碼的按鈕。在Activity中為這個按鈕添加點擊事件,在點擊事件中啟動CountDownTimer。
mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 啟動倒計時 CountDownTimer countDownTimer = new CountDownTimer(60000, 1000) { public void onTick(long millisUntilFinished) { mButton.setText("剩餘時間:" + millisUntilFinished / 1000 + "秒"); mButton.setClickable(false); } public void onFinish() { mButton.setText("重新獲取"); mButton.setClickable(true); } }.start(); } });
在CountDownTimer的onTick()方法中,我們每次更新Button的文本,讓其顯示剩餘的倒計時時間,並將Button設置為不可點擊。倒計時結束後,我們恢復Button的原本文本“重新獲取”,並將Button設置為可點擊狀態。
五、總結
CountDownTimer是一個方便實用的倒計時工具類,可以應用於很多場景,比如驗證碼倒計時、倒計時鬧鐘等。在使用CountDownTimer時,需要注意它的線程安全性,不能在onTick()和onFinish()方法中進行耗時操作,以及必須手動調用cancel()方法來停止倒計時。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/184537.html