flutter学习3---线程与异步

1,可以使用async/await来进行异步、耗时操作,例如:网络请求

2,若要处理大量数据,会导致UI挂起时,可以使用isolate来实现,Isolate是分离的运行线程不占用主线程的内存堆,当然,因此也不能访问主线程的变量或这使用setState()来更新UI

import 'dart:isolate';

//耗时进行异步请求
loadData()async{

  //打开receivePort来接收传过来的数据
  ReceivePort receivePort = new ReceivePort();
  //创建并生成与当前Isolate共享相同代码的Isolate
  await Isolate.spawn(dateLoader, receivePort.sendPort);
  
  //流的第一个元素
  SendPort sendPort = await receivePort.first;
  //流的第一个数据被收到后会关闭,所以需要重新打开一个新的receivePort以接收传入的信息
  ReceivePort receive = ReceivePort();
  //通过此端口发送异步消息
  List list = [11111,receive.sendPort];
  sendPort.send(list);
  List msg = await receive.first;
  //...msg可以处理数据
}

//isolate的入口函数,该函数会在新的Isolate中调用isolate.spawn的message参数会作为调用他的唯一参数
  dateLoader(SendPort sendPort)async{
  //打开receivePort以接收参数
  ReceivePort port = ReceivePort();
  //通知其他的isolates ,本isolate所坚挺的端口
    sendPort.send(port.sendPort);


    await for(var msg1 in port){
      // //获取其他端口发送的异步消息
      // List msg = await port.first;
      String data = msg1[0];
      SendPort replyTo = msg1[1];
      //...操作获取的data数据
      String  setData = data;
      replyTo.send(setData);

    }

}

3,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值