小编Luc*_*Dog的帖子

为什么 Flutter 中的网络请求不会阻塞 UI

我知道 Dart 是单线程的,flutter 也是,所以如果我做一些繁重的任务,它会阻塞 UI 事件队列,但是网络请求需要几秒钟而不阻塞 UI。

那么,为什么 Socket 不会阻塞 UI?困扰我的是为什么socket不会阻塞UI,但是繁重的任务会,虽然它们都是异步任务。

例如,此代码将阻止 UI

@override
void initState() {
super.initState();
Future((){
  var result;
  for (var i = 0; i < 1000000; ++i) {
    result = 'result is $i';
  }
  print(result);
});
Run Code Online (Sandbox Code Playgroud)

此代码是正常的 HTTP 请求?它不会阻塞 UI

get() async {
  var httpClient = new HttpClient();
  var uri = new Uri.http(
      'example.com', '/path1/path2', {'param1': '42', 'param2': 'foo'});
  var request = await httpClient.getUrl(uri);
  var response = await request.close();
  var responseBody = await response.transform(UTF8.decoder).join();
}
Run Code Online (Sandbox Code Playgroud)

socket之所以不阻塞UI,是为了将请求过程拆分成多个部分?并将这些部分发送到当前的微任务队列?正如这个答案所说:

/sf/answers/3974859941/ …

dart flutter

6
推荐指数
1
解决办法
2438
查看次数

标签 统计

dart ×1

flutter ×1