为什么在这段代码中,await 不会阻塞 flutter 中的 ui

2024-04-10

在默认示例应用程序中,每当您创建新的 flutter 项目时,我都添加了以下代码。

  initState() {
    super.initState();
    loop();
  }

  loop() async {
    while (true) {
      await Future.delayed(Duration(milliseconds: 10));
      print("count now:$_counter");
    }
  }
  1. 为什么应用程序 UI 没有被阻止?我可以单击+按钮,计数器平稳增加。即使我将延迟更改为 10 秒,UI 也能响应。 Loop() 是在不同的线程中运行吗?但我知道 dart 是单线程的。这怎么可能?

  2. 循环函数在哪里运行?

  3. 我可以使用这种技术来运行后台任务,例如检查 id 我的 sqflite 表行是否与云同步等???


Await 调用是非阻塞的。 其工作原理是,虽然 Dart 是单线程的,但某些 Dart 代码将其实现委托给 Dart VM。

文件读取或 HTTP 请求之类的事情是在 Dart 外部(通过浏览器或在 C++ 中)在不同的线程中执行的。

因此,虽然 Dart 是单线程的,但它仍然能够同时执行多个任务,而无需锁定 UI。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在这段代码中,await 不会阻塞 flutter 中的 ui 的相关文章

随机推荐