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

来源:互联网 发布:程序员培训全日制吗 编辑:程序博客网 时间:2024/04/30 06:06

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


1 0
原创粉丝点击