您的位置:首页 > 其它

倒计时功能CountDownTimer PK Handler

2016-04-26 10:09 786 查看

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

}


完毕~撒花~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: