倒计时功能CountDownTimer PK Handler

来源:互联网 发布:电脑txt小说编辑软件 编辑:程序博客网 时间:2024/04/30 12:01

每次实现获取短信验证码或者自动刷新倒计时功能的时候,都会习惯性用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开始)倒计时 }

完毕~撒花~

0 0