在我们的开发过程中会经常有一些倒计时的的功能需求。比如在注册的时候,我们需要用到的短信验证码,在规定的时间内我们我们不能重复的向服务器发送获得短信的请求;在我们的引导页的广告,需要几秒之后自动跳进我们的应用程序。像这种情况下,我们的处理方式一般就会用handler+thread来处理。我们需要单独开启一个线程去计时,一定得时间差后定时的去用handler发送一个信息去更改显示的时间。这样就会我们想要的效果:3、2、1、0。其实Android本身有一个实现这样的共能的类:CountDownTimer.
一、使用:
CountDownTimer是一个抽象类。这里我就模拟短息验证码的场景:去贴出代码
//60000代表的是 60秒每隔1秒去更改button的显示的时间(执行onTick()方法)
//60秒之后执行onFinish()。
private CountDownTimertimer=new CountDownTimer(60000,1000) {
//我们在这里去更改定时改变的东西
@Override
public void onTick(longmillisUntilFinished) {
if(getActivity() !=null) {
mRegisterCodeBtn.setClickable(false);
String str = getActivity().getResources().getString(R.string.my_add_bank_card);
str = String.format(str, millisUntilFinished /1000);
mRegisterCodeBtn.setText(str);
}
}
//60秒执行完之后,执行的方法。
@Override
public void onFinish() {
Btn.setText("重新获取");
tn.setEnabled(true);
tn.setClickable(true);
}
};
二、handler+thread 和 CountDownTimer的比较
CountDownTimer的实现是用的handler的底层实现的,计算时间的功能也不是从新开启一个单独的线程去实现的,而是通过系统的时间和message的信息的绑定去实现的,不用在多单独开启一个线程。而是使用的本来就已经加载进内存中的代码去实现的功能。
所以说,两者之间。使用CountDownTimer的效率和效果会更好一些。