14.Dart 计时器和睡眠

1,387 阅读1分钟

在dart使用计时器需要导入包import 'dart:async';
Timer计时器类,可配置为一次或多次触发。

Constructors 构造函数

单次计时器

main() {
  //单次计时器 
  Timer(Duration(seconds: 2), () => {print('这是一次性定时器,延迟2秒执行')});
}

重复计时器

main() {
  // i>10后取消计时器
  num i = 1;
  Timer.periodic(Duration(seconds: 1), (timer) {
    print(timer.isActive); // true  返回定时器是否仍处于活动状态
    print(timer.runtimeType); // _Timer 对象的运行时类型 
    print(i++);
    if (i > 10) {
      print(timer.toString()); // 返回此对象的字符串表示形式
      timer.cancel(); // 可以使用timer.cancel()来取消定时器,避免无限回调
      print(timer.hashCode); // 此对象的哈希值
      print(timer.isActive); // false
    }
  });
}

Timer.run() 尽快异步运行给定的回调

Timer.run(void Function() callback);

import 'dart:async';

main() {
  var futureInstance = Future.value(12345);
  for (var i = 0; i < 1; i++) {
    Future.microtask(() => print('这是Future.microtask()微任务方法'));
    externalApproach();
    print('第一个for循环: $i');
    futureInstance.then((value) => print(value));
    Timer.run(methods);
  }
  for (var i = 0; i < 2; i++) {
    print('第二个for循环: $i');
  }
  Timer(Duration(milliseconds: 0), () => {print("一次性的定时器")});
}

void methods() async {
  print("尽快异步运行给定的回调");
}

void externalApproach() {
  print("这是外部方法");
}
/*
这是外部方法
第一个for循环: 0
第二个for循环: 0 第二个for循环: 1
12345
这是Future.microtask()微任务方法
尽快异步运行给定的回调
一次性的定时器
*/