赞
踩
在Android开发过程中,我们常常会遇到需要开发一些定时任务,比如定时请求服务器获取数据、实现短信验证码的60秒刷新等等。
本篇博客将介绍如何使用CountDownTimer定时器类来实现上述的这些开发任务。
目录
CountDownTimer (long millisInFuture, long countDownInterval)
CountDownTimer默认的时间单位是毫秒ms
其构造函数参数的意思是在millisInFuture的时间内,每隔countDownInterval时间做一次给定的定时任务(触发onTick())
@Override public void onFinish() { //定时器倒计时结束后回调的方法 } @Override public void onTick(long millisUntilFinished) { //每到达一次倒计时的间隔时间回调一次该方法(如果倒计时间隔时间是一秒钟,那么每秒刷新一次) //具体的定时任务在这里定义 }需要重载的成员函数有两个,onFinish()和onTick()
onFinish()是在millisInFuture时间结束后调用的方法,表示定时器工作结束
onTick()是在millisInFuture时间内,每隔countDownInterval时间调用一次,在这里我们定义具体的定时任务
构造CountDownTimer继承类对象,使用对象的start方法即可开始定时工作。
这里构造MyCountDownTimer成员类继承CountDownTimer进行一些方法的重写
class MyCounterTime extends CountDownTimer{ public MyCounterTime(long millisInFuture, long countDownInterval) { //将时间单位改变成秒 super(millisInFuture*1000, countDownInterval*1000); } @Override public void onTick(long millisUntilFinished) { } @Override public void onFinish() { } }
MyCountDownTimer time=new MyCounterTime(86400,60); time.start();
定时请求任务的实现是在OnTick()内写入进行的网络请求即可
具体代码如下:(如何进行网络请求,可以参考博文:Android网络请求_尘心平的博客-CSDN博客_android 网络请求)
class MyCounterTime extends CountDownTimer{ public MyCounterTime(long millisInFuture, long countDownInterval) { super(millisInFuture*1000, countDownInterval*1000); } @Override public void onTick(long millisUntilFinished) { ApiBuilder builder=new ApiBuilder().Url(StringConstant.GET_ERROR).Headers("Content-Type","application/json"); ApiClient.getInstance().doGet(builder, new CallBack<ErrorBean>() { @SuppressLint("SetTextI18n") @Override public void onResponse(ErrorBean data) { //接受处理 } @Override public void onFail(String msg) { System.out.println(msg); } },ErrorBean.class,getContext()); } @Override public void onFinish() { } }
class MyCountDownTimer extends CountDownTimer { public MyCountDownTimer(long millisInFuture, long countDownInterval) { //定时器通过构造函数传入的变量,分别代表总时间和倒计时间隔时间 super(millisInFuture * 1000, countDownInterval * 1000); } @Override public void onFinish() { //定时器倒计时结束后回调的方法 //我们可以在这里改变发送短信的文字和状态 code_send.setText("重新获取验证码"); //将发送按键设置为可点击状态 code_send.setEnabled(true); } @Override public void onTick(long millisUntilFinished) { //每到达一次倒计时的间隔时间回调一次该方法( //设置多少秒后重试的code_send文本更新) code_send.setText(millisUntilFinished / 1000 + "秒后重试"); } }之后在code_send点击的监听事件内构建MyCountDownTimer对象,调用start方法即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。