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

项目需求:点击“发送验证码”,开始倒计时,倒计时为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),这样优化用户体验。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值