美文网首页
Flutter 异步编程

Flutter 异步编程

作者: 波澜步惊 | 来源:发表于2019-03-12 16:36 被阅读9次

前言

Flutter框架使用的编程语言是 dart. dart中太基础的我就不写了,写点和java不一样的地方。

异步编程,相对于Android JavaFlutter dart是单线程运行app的,也可以说,Flutter没有多线程的概念,那么app一定会有异步网络请求这种场景,那么怎么实现呢? 新的概念:Isolate .

正文

flutterIsolate.png

这是 Flutter 社区对 Isolate的描述,emmmm,真够简洁的。总之一句话,isolate是内存隔离的堆内存区,多个isolate之间不能进行内存共享。

一张图说明一切:


Isolate概念.png

示例代码:

import 'dart:isolate';

int i;

//看到这个main函数没?它作为入口函数,它本身也是在一个isolate内部运行。
void main() {
  //Isolate的概念,利用 彼此隔离的堆内存,运行异步任务。 多个isolate之间可以相互通信。
  ReceivePort receiverPort = new ReceivePort(); // 卧槽,怎么没有代码提示
  //这个时候拿到了一个当前isolate的接收端口

  //创建一个另外的Isolate,老叫英文挺别扭的,就叫你吧
  //创建,第一个参数是 一个Function ,方法,可以传匿名方法,也可以自定义
  Isolate.spawn(entryPoint, receiverPort.sendPort);
  //这样就新创建了一个,并且把main这个的sendPort传给了它,让main可以传消息到 新创建的

  receiverPort.listen((t) {//dart的一个isolate的运行过程,也是通过事件驱动的,通过事件队列的循环,来响应各种变化。
    if (t is SendPort) {
      print("main给B发送消息 ,内容为:收到收到");
      t.send(
          "收到收到!"); //我这里拿到了B的sendPort,也给他发了消息,但是B并没有收到。为啥?因为B并没有注册监听呀。擦?
    } else
      print("main接收到 B  发来的消息~~~~~" + t);
  });

//  sleep(Duration(seconds: 2)); //由于这里是单线程,所以main函数这个,要执行lis中的内容,也必须要等休眠结束
//  print("main睡眠结束"); //

}

//参数:sendPort 是main函数所在的传过来的sendPort,所以,当前这个可以用它来向main传信
void entryPoint(SendPort sendPort) {
  print("B 给main发送消息 ,内容为:我是B,我给main 发消息啦");
  sendPort.send("我是B,我给main 发消息啦"); //  但是我传了,main没收到?是的,main并没有注册监听器

  ReceivePort receiverPort = new ReceivePort();
  sendPort.send(receiverPort.sendPort); //但是我们要实现双向通信,那就必须,把B的sendPort给main

  receiverPort.listen((t) {
    print("B接收到 main 的消息~~~~~" + t);
  });
}

打印的日志

B 给main发送消息 ,内容为:我是B,我给main 发消息啦
main接收到 B 发来的消息~~~~~我是B,我给main 发消息啦
main给B发送消息 ,内容为:收到收到
B接收到 main 的消息~~~~~收到收到!

相关文章

  • Flutter 异步编程

    Dart 和 JavaScript 共同点是——单线程,同步代码会阻塞程序。 因此程序里有大量的异步操作,它是用F...

  • Flutter 异步编程

    定时器简要使用 async使用 异步查看 在Future结束的时候我们需要进行一系列的操作,then().catc...

  • Flutter 异步编程

    前言 Flutter框架使用的编程语言是 dart. dart中太基础的我就不写了,写点和java不一样的地方。异...

  • Flutter 异步编程

    由于Flutter是单线程的,所以java或原生的coder不要认为flutter的异步是多线程 了解java和j...

  • Flutter 异步编程

    Flutter 架构 Flutter框架分三层Framework,Engine, Embedder Framewo...

  • Flutter异步编程

    单线程异步 一般来说,dart是单线程的,通常我们的flutter代码都是运行在一个线程里,并无主次线程之分,除非...

  • Flutter 异步编程二(isolate、compute)

    Flutter 异步编程一(Future、async、await、completer) 一、书接上文: 上篇讲到我...

  • @@@@@@@@

    \009-享学课堂安卓架构第一期├01 flutter│ ├Dart异步编程(1)-.mp4│ ├Dart异步...

  • flutter-异步编程

    首先看一张Flutter体系结构图: 我们只关注线程相关信息 1、Framework:我们直接接触的层级 2、en...

  • Flutter异步编程: Futures

    重点 Dart代码运行在一个已执行的线程内。 阻塞线程执行的代码能够使程序冻结。 Future对象(Futures...

网友评论

      本文标题:Flutter 异步编程

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