Android 使用CountDownTimer实现定时任务

在Android开发过程中,我们常常会遇到需要开发一些定时任务,比如定时请求服务器获取数据、实现短信验证码的60秒刷新等等。

本篇博客将介绍如何使用CountDownTimer定时器类来实现上述的这些开发任务。

目录

CountDownTimer类

构造方法

重载函数

使用

实现定时请求

短信验证码的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() {

    }
}

短信验证码的60秒更新


    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方法即可

猜你喜欢

转载自blog.csdn.net/weixin_53966032/article/details/126632573