当前位置:   article > 正文

Android 使用CountDownTimer实现定时任务_android countdowntimer

android countdowntimer

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

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

目录

CountDownTimer类

构造方法

重载函数

使用

实现定时请求

短信验证码的60秒更新


CountDownTimer类

构造方法

CountDownTimer (long millisInFuture, long countDownInterval)

CountDownTimer默认的时间单位是毫秒ms

其构造函数参数的意思是在millisInFuture的时间内,每隔countDownInterval时间做一次给定的定时任务(触发onTick())

重载函数

  1. @Override
  2. public void onFinish() {
  3. //定时器倒计时结束后回调的方法
  4. }
  5. @Override
  6. public void onTick(long millisUntilFinished) {
  7. //每到达一次倒计时的间隔时间回调一次该方法(如果倒计时间隔时间是一秒钟,那么每秒刷新一次)
  8. //具体的定时任务在这里定义
  9. }

需要重载的成员函数有两个,onFinish()和onTick()

onFinish()是在millisInFuture时间结束后调用的方法,表示定时器工作结束

onTick()是在millisInFuture时间内,每隔countDownInterval时间调用一次,在这里我们定义具体的定时任务

使用

构造CountDownTimer继承类对象,使用对象的start方法即可开始定时工作。

这里构造MyCountDownTimer成员类继承CountDownTimer进行一些方法的重写

  1. class MyCounterTime extends CountDownTimer{
  2. public MyCounterTime(long millisInFuture, long countDownInterval) {
  3. //将时间单位改变成秒
  4. super(millisInFuture*1000, countDownInterval*1000);
  5. }
  6. @Override
  7. public void onTick(long millisUntilFinished) {
  8. }
  9. @Override
  10. public void onFinish() {
  11. }
  12. }
  1. MyCountDownTimer time=new MyCounterTime(86400,60);
  2. time.start();

实现定时请求

定时请求任务的实现是在OnTick()内写入进行的网络请求即可

具体代码如下:(如何进行网络请求,可以参考博文:Android网络请求_尘心平的博客-CSDN博客_android 网络请求

  1. class MyCounterTime extends CountDownTimer{
  2. public MyCounterTime(long millisInFuture, long countDownInterval) {
  3. super(millisInFuture*1000, countDownInterval*1000);
  4. }
  5. @Override
  6. public void onTick(long millisUntilFinished) {
  7. ApiBuilder builder=new ApiBuilder().Url(StringConstant.GET_ERROR).Headers("Content-Type","application/json");
  8. ApiClient.getInstance().doGet(builder, new CallBack<ErrorBean>() {
  9. @SuppressLint("SetTextI18n")
  10. @Override
  11. public void onResponse(ErrorBean data) {
  12. //接受处理
  13. }
  14. @Override
  15. public void onFail(String msg) {
  16. System.out.println(msg);
  17. }
  18. },ErrorBean.class,getContext());
  19. }
  20. @Override
  21. public void onFinish() {
  22. }
  23. }

短信验证码的60秒更新

  1. class MyCountDownTimer extends CountDownTimer {
  2. public MyCountDownTimer(long millisInFuture, long countDownInterval) {
  3. //定时器通过构造函数传入的变量,分别代表总时间和倒计时间隔时间
  4. super(millisInFuture * 1000, countDownInterval * 1000);
  5. }
  6. @Override
  7. public void onFinish() {
  8. //定时器倒计时结束后回调的方法
  9. //我们可以在这里改变发送短信的文字和状态
  10. code_send.setText("重新获取验证码");
  11. //将发送按键设置为可点击状态
  12. code_send.setEnabled(true);
  13. }
  14. @Override
  15. public void onTick(long millisUntilFinished) {
  16. //每到达一次倒计时的间隔时间回调一次该方法(
  17. //设置多少秒后重试的code_send文本更新)
  18. code_send.setText(millisUntilFinished / 1000 + "秒后重试");
  19. }
  20. }

 之后在code_send点击的监听事件内构建MyCountDownTimer对象,调用start方法即可

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/808919
推荐阅读
相关标签
  

闽ICP备14008679号