美文网首页
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