Timer简介
Timer类主要用于安排延时任务和定时任务,
延时任务是指延迟一段时间之后才执行的任务,
定时任务是指每隔一段时间执行一次的任务。
Timer中的代码都是异步执行的。阅读源码可知Future类的Future构造函数和delayed构造函数都是使用的Timer类。
如何创建Timer
Timer默认构造函数
Timer默认的构造函数有两个必选参数
- 参数
Duration:Duration类型,时间间隔。 - 参数
Callback:函数类型,该函数在延迟Duration时间后执行。
示例:
Timer(Duration(seconds: 1),(){
print("方法被执行了");
});
print("同步代码");
输出结果
同步代码 方法被执行了
一秒之后控制台打印“方法被执行了”。
Timer.periodic构造函数
Timer.periodic构造函数有两个必选参数
- 参数
Duration:Duration类型,时间间隔。 - 参数
Callback:函数类型,该函数在每隔Duration时间后执行一次,此函数有一个timer参数,timer参数就是Timer.periodic构造函数创建的Timer对象。
示例:
Timer.periodic(Duration(seconds: 2), (timer) {
print(timer.runtimeType);
});
输出结果
_Timer _Timer _Timer
每隔两秒控制台打印一次timer的类型
Timer的常用方法和属性
创建Timer对象
想测试Timer类的方法和属性,第一步肯定是创建Timer对象
示例:
Timer timer = Timer.periodic(Duration(seconds: 2), (timer) {
});
isActive
判断当前定时器是否在活跃状态的bool值,
如果尚未执行回调并且未取消计时器,则计时器将处于活动状态。
如果尚未取消,则计时器处于活动状态。
timer.isActive
tick
tick代表((当前时间)-(timer启动的时刻))/(timer的Duration参数),不是已经发生的回调调用次数。
该值从零开始,并在每次发生计时器事件时递增,因此每个回调将看到比前一个更大的值。
可能有一些难以理解,我们来看一段代码
Timer timer = Timer.periodic(Duration(seconds: 2), (timer) {
print("timer run");
});
print("timer.tick:${timer.tick}");
Timer(Duration(seconds: 5), () {
print("timer.tick:${timer.tick}");
});
控制台输出如下
timer.tick:0 timer run timer run timer.tick:2
在程序刚开始执行的0秒打印,因为没有度过任何一个时间间隔(2s),所以tick等于0,到了第5秒,度过了两个时间间隔(2s),所以tick等于2。
cancel()
cancel方法用于取消Timer,一旦Timer已经被取消,回调函数不会被调用。
示例:
Timer timer = Timer.periodic(Duration(seconds: 2), (timer) {
print("timer run");
});
Timer(Duration(seconds: 5), () {
print("timer.cancel");
timer.cancel();
});
输出结果:
timer run timer run timer.cancel
五秒之后定时器取消,回调函数停止调用,timer run不会再被打印。
run()
Timer.run()是静态方法,立即异步执行回调函数,等价于Timer(Duration.zero, callback)。
run函数的参数类型为Function,需要异步执行的函数。
示例:
Timer.run(() {
print("timer.run");
});