方法1:使用handler
step 1:application创建handler,APP需要在Manifest注册
/**
* Project_name:MainActivity
* Created by:ChenFuXU.
* Date: 2021/12/11 20:07
*/
public class APP extends Application {
private static Handler sHandler = null;
@Override
public void onCreate() {
super.onCreate();
sHandler = new Handler();
}
public static Handler getHandler() {
return sHandler;
}
}
step 2:
/**
* 倒计时多久
* 时间间隔
* 通知UI更新
* 方法1:使用handle
*/
private void startCountDown() {
mHandler = APP.getHandler();
mHandler.post(new Runnable() {
@Override
public void run() {
mResTime -= mDTime;
if (mResTime > 0) {
mHandler.postDelayed(this, mDTime);
// 更新UI
mVerifyCodeTv.setEnabled(false);
mVerifyCodeTv.setText("(" + mResTime / 1000 + ") 秒");
mIsCounttingDown = true;
} else {
mResTime = mTotalDuration;
mIsCounttingDown = false;
mVerifyCodeTv.setEnabled(true);
mVerifyCodeTv.setText("获取验证码");
// 倒计时结束后更新状态
updateAllBtnStatus();
}
Log.d(TAG, "startCountDown mResTime = " + mResTime);
}
});
方法2:使用CountDownTimer,直接调用即可
/**
* 方法2:CountDownTimer
* 倒计时30s
* 时间间隔1s
*/
private void beginCountDown() {
new CountDownTimer(30000, 1000) {
@Override
public void onTick(long millisRes) {
// 更新UI
Log.d(TAG, "Thread.currentThread() = " + Thread.currentThread());
mVerifyCodeTv.setEnabled(false);
int res = (int) (millisRes / 1000);
mVerifyCodeTv.setText("(" + res + ") 秒");
mIsCounttingDown = true;
}
@Override
public void onFinish() {
// 倒计时结束
mIsCounttingDown = false;
mVerifyCodeTv.setEnabled(true);
mVerifyCodeTv.setText("获取验证码");
// 倒计时结束后更新状态
updateAllBtnStatus();
}
}.start();
}