美文网首页
Flutter -- 11.Timer

Flutter -- 11.Timer

作者: MissStitch丶 | 来源:发表于2021-11-17 09:48 被阅读0次

1.关于Timer

  • Flutter中的定时器
  • 任务添加在事件队列
  • Timer异步执行

2.Timer延迟执行任务

  • Timer(Duration duration, void Function() callback)
  • 类似于Futuer.delayed,延迟一段时间执行任务
  • duration延迟多长时间再执行任务
timerDelay() {
  Timer(const Duration(seconds: 5), () {
    print('延迟了5秒执行任务');
  });
  print('外部代码');
  // flutter: 外部代码
  // flutter: 延迟了5秒执行任务
}

3.Timer.run()

  • run代码块里的代码只会异步执行一次
timerRun() {
  Timer.run(() {
    print('执行任务');
  });
  print('外部代码');
  // flutter: 外部代码
  // flutter: 执行任务
}

4.Timer.periodic

  • Timer.periodic(Duration duration, void callback(Timer timer))
  • 周期性的执行任务
  • 定时器常用的一个工厂构造方法
timerPeriodic() {
  int _count = 0;
  //每个1秒执行一次任务
  Timer.periodic(const Duration(seconds: 1), (timer) {
    _count += 1;
    print(_count);
  });
}

5.当多个事件队列执行时,是否会影响Timer的执行?

  • 问题的引入:iOS中TableView滑动列表会影响Timer的执行,只有修改runloop的mode后,定时器才能正常执行
  • 经验证发现,当timer在执行时,滚动ListView不会影响timer异步任务的执行。可以看出Flutter已经对timer做了优化

6.当我们在使用定时器的时候,是否需要考虑手动释放的问题?

  • 经验证发现,如果定时器在执行时,当Widget释放时,会造成内存泄漏,虽然页面释放了,但是timer没有被释放掉
  • 此时需要引入Widget中的一个生命周期方法,dispose
  • 在dispose内,如果_timer != null && _timer!.isActive,执行_timer.cancel来取消并释放掉timer
@override
  void dispose() {
    // TODO: implement dispose
    if (_timer != null && _timer!.isActive) {
      _timer!.cancel();
    }
    super.dispose();
  }

相关文章

网友评论

      本文标题:Flutter -- 11.Timer

      本文链接:https://www.haomeiwen.com/subject/xkihtrtx.html