Android线程—Timer类(三)

来源:互联网 发布:mac打不开淘宝 编辑:程序博客网 时间:2024/06/17 14:17

今天来介绍下timer的schedule(TimerTask task, Date firstTime, long period)方法,该方法的主要作用是在指定的日期之后,按照指定的间隔周期性的无限循环的执行某一任务。

多线程之Timer类的使用(三)——循环执行

TimerTask子类

这个类就是timer类执行的任务,在项目中把要循环执行的代码放在run方法既可以了。

  • 计划时间晚于当前时间,时间到了就按周期执行,下面请看测试代码

多线程之Timer类的使用(三)——循环执行

循环执行

从结果可以看到,任务在设定的时间到了之后按照周期无限循环执行任务的代码,并且按照我们设定的4s时间。

  • 计划时间早于当前时间,提前运行后周期执行

多线程之Timer类的使用(三)——循环执行

先执行后周期执行

从结果可以看到,如果设置的时间比当前时间早的话,那么先会执行一次后,再按照我们设定的时间循环运行。

但是呢,如果我们设置的时间,为4s的话,而执行的任务花费了5s时间,那么会是执行完之后,再等待4s时间接着运行吗?下面请看测试。

多线程之Timer类的使用(三)——循环执行

任务执行5s

如上图所示,我们在MyTask1里面休眠5s模拟任务执行5s的情况,5s后打印出时间(这边就不贴出代码了,自己补充)。

从结果可以看到,如果我们任务的执行时间大于我们设置的循环执行时间的时候,那么任务执行完之后,马上就开始执行。而不是等待任务执行完之后等4s再执行。

下面在看下任务执行时间小于设定时间的情况。

多线程之Timer类的使用(三)——循环执行

任务执行2s

这边可以看到,如果任务执行花费2s,而我们设置的循环运行时间为4s,那么从任务开始时就开始计算时间,不管任务执行多少秒(只要在设定的循环时间之内),下次执行任务的时间都是从开始时间到设定的时间,图上开始时间后4s开始执行下一次任务。