您的位置:首页 > 移动开发 > Android开发

使用Timer 定时器,结合TimerTask,HandlerMessage完成验证码发送功能

2017-03-17 09:58 288 查看
项目需求:点击“发送验证码”,开始倒计时,倒计时为0时显示重新发送。

1.Timer的使用:Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。

声明:

private Timer timer;
private MyTasker timerTask;
private int i;
发送验证码点击事件:

i=60;//定义从60s开始计时
timerTask=new MyTasker();
timer=new Timer();
timer.schedule(timerTask,0,1000);
这里的timer.schedule(timerTask,0,100);
//第一个参数 TimerTask 类,实现 public void run() 方法,因为 TimerTask 类实现了 Runnable 接口。
//第二个参数"0"的意思是:(0就表示无延迟)
当你调用该方法后,该方法必然会调用 TimerTask 类 TimerTask 类 中的 run() 方法,这个参数就是这两者之间的差值,转换成汉语的意思就是说,用户调用 schedule() 方法后,要等待这么长的时间才可以第一次执行 run() 方法。
//第三个参数"60*60*1000"的意思就是:
(单位是毫秒60*60*1000为一小时)
(单位是毫秒3*60*1000为三分钟)
第一次调用之后,从第二次开始每隔多长的时间调用一次 run() 方法

2.TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。

我们自定义个MyTimerTask类继承TimerTask;

class MyTasker extends TimerTask{
@Override
public void run() {
handler.sendEmptyMessage(i--);
}
}

3.通过handlemessage改变主线程UI,
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
if (msg.what==0||msg.what<0){
tv_msg.setText("重新发送");
timer.cancel();
timerTask.cancel();
}else {
tv_msg.setText(msg.what+"秒");
}
super.handleMessage(msg);
}
};

实际项目中,我们点击发送验证码后,调用后台接口,接口成功后进行倒计时,同时设置点击按钮setEable(false),这样优化用户体验。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息