倒计时功能CountDownTimer PK Handler

本文探讨了在Android中实现倒计时功能时,通常使用Handler的方法,并分享了一个新发现——Android自带的CountDownTimer类。通过对比两者,展示了CountDownTimer的简单使用方式。
摘要由CSDN通过智能技术生成
每次实现获取短信验证码或者自动刷新倒计时功能的时候,都会习惯性用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开始)倒计时

 }

完毕~撒花~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值