倒计时功能CountDownTimer PK Handler

每次实现获取短信验证码或者自动刷新倒计时功能的时候,都会习惯性用Handler实现,这两天,发现了一个Android自带的一个倒计时功能类,好开心。分享一下~

首先,先摆一下之前的实现:

private int mSecondsCount = 0 ;
private final Button mGetMSGCodeBtn;
private Handler mHandler= new Handler() {

            @Override
            public void dispatchMessage(Message msg) {
                super.dispatchMessage(msg);
                if (msg.what == 301) {
                    // 验证码倒计时
                    mSecondsCount--;
                    if (mSecondsCount <= 0) {
                        //倒计时完毕,记得恢复初始状态,完成相应功能
                        removeMessages(301);
                    } else {
                        //显示当前倒计秒数的数值
                        mGetMSGCodeBtn.setText(mSecondsCount + "s");
                        //进行下一秒的倒计时
                        sendEmptyMessageDelayed(301, 1000);
                    }
                }
            }
        };

在请求接口成功后只需要调用

mHandler.removeMessages(301);//该功能确保当前handler的301请求处于初始状态
mHandler.sendEmptyMessage(301);//开始倒计时请求

洋洋洒洒写了一堆老代码之后,发现了新大陆。快看~

 private class CountDownSeconds extends CountDownTimer {

         public CountDownSeconds(long millisInFuture, long countDownInterval) {//构造函数需要传入的参数是:总共要倒计时的时间,每个多长时间显示的数值发生变化
         super(millisInFuture, countDownInterval);

         }

         @Override
         public void onFinish() {
            //此处编写倒计时结束的功能(例如恢复控件的初始状态)
             mGetMSGCodeBtn.setText("获取短信验证码");
         }

         @Override
         public void onTick(long millisUntilFinished) {
             //正在倒计时中
             mGetMSGCodeBtn.setText((millisUntilFinished / 1000) + "s");

         }
}

调用的时候,只需要

private CountDownSeconds mCountDownSeconds;

 if (mCountDownSeconds != null) {

    mCountDownSeconds.start();//开始倒计时

 }else{

     mCountDownSeconds = new CountDownSeconds(60 * 1000, 1000);
     mCountDownSeconds.start();

 }

if (mCountDownSeconds != null) {

    mCountDownSeconds.cancel();//取消倒计时,取消后,如果再调用start()方法,则重新(如上设置的时间,就是又从60s开始)倒计时

 }

完毕~撒花~

你可能感兴趣的:(android,handler,验证码,倒计时,CountDownT)