在开发中我们有时会有这样的需求,即在固定的每隔一段时间执行某一个任务。比如UI上的控件需要随着时间改变,我们可以使用Java为我们提供的计时器的工具类,即Timer和TimerTask。

Timer是一个普通的类,其中有几个重要的方法;而TimerTask则是一个抽象类,其中有一个抽象方法run(),类似线程中的run()方法,我们使用Timer创建一个他的对象,然后使用这对象的schedule方法来完成这种间隔的操作。

schedule方法有三个参数
第一个参数就是TimerTask类型的对象,我们实现TimerTask的run()方法就是要周期执行的一个任务;
第二个参数有两种类型,第一种是long类型,表示多长时间后开始执行,另一种是Date类型,表示从那个时间后开始执行;
第三个参数就是执行的周期,为long类型。

schedule方法还有一种两个参数的执行重载,第一个参数仍然是TimerTask,第二个表示为long的形式表示多长时间后执行一次,为Date就表示某个时间后执行一次。

Timer就是一个线程,使用schedule方法完成对TimerTask的调度,多个TimerTask可以共用一个Timer,也就是说Timer对象调用一次schedule方法就是创建了一个线程,并且调用一次schedule后TimerTask是无限制的循环下去的,使用Timer的cancel()停止操作。当然同一个Timer执行一次cancel()方法后,所有Timer线程都被终止。

用法:

    //true 说明这个timer以daemon方式运行(优先级低,程序结束timer也自动结束)   java.util.Timer timer = new java.util.Timer(true);  TimerTask task = new TimerTask() {  public void run() {  //每次需要执行的代码放到这里面。     }     };  //以下是几种调度task的方法:  //time为Date类型:在指定时间执行一次。  timer.schedule(task, time);  //firstTime为Date类型,period为long,表示从firstTime时刻开始,每隔period毫秒执行一次。  timer.schedule(task, firstTime, period);     //delay 为long类型:从现在起过delay毫秒执行一次。  timer.schedule(task, delay);  //delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。  timer.schedule(task, delay, period);  

示例代码:

    import android.app.Activity;  import android.os.Bundle;  import android.os.Handler;  import android.os.Message;  import java.util.Timer;  import java.util.TimerTask;  public class TimerTaskActivity extends Activity {  private Timer mTimer;  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  // init timer  mTimer = new Timer();  // start timer task  setTimerTask();  }  @Override  protected void onDestroy() {  super.onDestroy();  // cancel timer  mTimer.cancel();  }  private void setTimerTask() {  mTimer.schedule(new TimerTask() {  @Override  public void run() {  Message message = new Message();  message.what = 1;  doActionHandler.sendMessage(message);  }  }, 1000, 1000/* 表示1000毫秒之後,每隔1000毫秒執行一次 */);  }  /** * do some action */  private Handler doActionHandler = new Handler() {  @Override  public void handleMessage(Message msg) {  super.handleMessage(msg);  int msgId = msg.what;  switch (msgId) {  case 1:  // do some action  break;  default:  break;  }  }  };  }  

Android之Timer和TimerTask的介绍相关推荐

  1. android的timertask,Android 中 Timer 和 TimerTask的使用

    Android中Timer是一个普通的类,其中有几个重要的方法:而TimerTask则是一个抽象类,其中含有一个抽象方法run(). 使用Timer类中的schedule()方法可以完成对TimerT ...

  2. 【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )

    文章目录 一.Timer 定时器基本使用 二.Timer 定时器常用用法 三.Timer 源码分析 四.Timer 部分源码注释 五.源码及资源下载 参考文档 : Timer 定时器 API 文档 T ...

  3. android Timer与TimerTask的相关操作

    项目上面的部分操作需要使用到定时器进行周期性的控制.网络上面对于定时器的操作通常有三种实现方法. 我是通过Timer与TimerTask相结合实现的定时器功能.具体实现过程如下: 第一步,得到Time ...

  4. Timer与TimerTask的真正原理使用介绍

    其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来实现,例如这样: Timer timer = new Timer() ...

  5. Java定时任务(一) Timer及TimerTask的案例解析及源码分析

    Java定时任务(一)  Timer及TimerTask的案例解析及源码分析 一.概述: 定时任务这个概念在Java的学习以及项目的开发中并不陌生,应用场景也是多种多样.比如我们会注意到12306网站 ...

  6. android倒计时停止,Android 使用 Timer 做倒计时。实现开始 (start),取消 (cancel),暂停 (pause),重开 (resume)功能...

    在 Android 使用 Timer 做倒计时.实现开始 (start),取消 (cancel),暂停 (pause),恢复 (resume)功能 在 Android 开发中,我们很多地方会使用到倒计 ...

  7. Android定时器Timer和TimerTas的使用

    1. 概述 Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. Time ...

  8. Android定时器Timer简单使用

    Android定时器Timer简单使用 Timer简介 Timer使用 总结 Timer简介 Timer(计时器)位于 java.util包下,可用于创建定时任务,任务可以安排为一次性执行,也可以定期 ...

  9. Android 计时器Timer,时间格式化以时分秒显示

    在开发中我们有时会有这样的需求,即在固定的每隔一段时间执行某一个任务.比如UI上的控件需要随着时间改变,我们可以使用Java为我们提供的计时器的工具类,即Timer和TimerTask. API Ti ...

最新文章

  1. Java 里的 for (;;) 与 while (true),哪个更快?
  2. 验证apk签名方式(V1 || V2)
  3. hdu4353 Finding Mine三角形内的点数
  4. Caffe的创始人贾扬清说,算法工程师将不存在?
  5. 移动前端适配方法总结
  6. 标记已读如何实现Java_javamail标记gmail消息为已读
  7. 如何通过直接复制frm文件以实现恢复/复制innodb数据表?
  8. mdpi ldpi hdpi的区别
  9. [转载]赵匡胤做事有底线
  10. 班级量化考核系统php代码,学生信息量化考核管理系统
  11. Head First 深入浅出系列 电子书
  12. Spring核心--容器详解
  13. 给txt格式的文档增加目录
  14. 农村也可以干大事业,小伙返乡种植葡萄,年收益达100万
  15. <figure> <figcaption>筆記
  16. 【数据库运维】MYSQL备份恢复管理(下)
  17. dp——洛谷P1240 诸侯安置
  18. 站长们如何优化自已的新网站
  19. 索尼文化变革催生低端DV
  20. 我用ChatGPT写2023高考语文作文(四):新课标II卷

热门文章

  1. 为什么 Linux 上的 Asp.NET 5 需要 Kestrel ?
  2. 基于Yarp实现内网http穿透
  3. 聊一聊数据导出那些事
  4. 聊一聊Docker与时区
  5. 很遗憾,总对工作挑挑拣拣的家伙,一般结局都不会太好
  6. .NET Core + Spring Cloud:服务注册与发现
  7. 遵守这些原则让你开发效率提高一倍
  8. ASP.NET Core分布式项目实战(Consent Controller Get请求逻辑实现)--学习笔记
  9. API标准化成为技术团队面临的最大挑战
  10. ASP.NET Core 搭配 Nginx 的真实IP问题