Flutter中的isolate-spawn(一)
在Dart中一般来说是单线程模型,但是也可以开启新的线程,两个线程之间数据不共享,内存隔离,这个跟Java这些代码有些区别,对于耗时比较严重的逻辑,比如几百毫秒的逻辑,使用isolate比较适合,本文只做简单的使用演示,代码如下:
注意: Isolate.spawnUri 函数在Flutter中使用会出现以下错误:
[ERROR:flutter/runtime/dart_isolate.cc(882)] Unhandled exception:
UI actions are only available on root isolate.
import 'package:flutter/material.dart';
import 'dart:isolate';
import 'dart:async';
var isolate;
// isolate入口函数,该函数必须是静态的或顶级函数,不能是匿名内部函数。
void isolateSendPort(SendPort sendPort) {//这里面可以不停的发消息,只要线程没结束int counter = 0;sendPort.send("发送计数:$counter");isolate.kill(priority: Isolate.immediate);//杀死Isolate,发完消息后就杀死isolate线程
}
void main() async{//不放在Dart中执行是因为,主程序运行完就直接挂了,所以没法验证final receiver = ReceivePort();//接收端端口receiver.listen((message) {//端口监听print( "Main: 接收的内容 $message");});isolate = await Isolate.spawn(isolateSendPort, receiver.sendPort);runApp(MyApp());
}class MyApp extends StatefulWidget {@override_MyAppState createState() => _MyAppState();
}class _MyAppState extends State<MyApp> {@overridevoid dispose() {super.dispose();// isolate.kill(priority: Isolate.immediate);//杀死Isolate}@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Material App',home: Scaffold(appBar: AppBar(title: Text('Material App Bar'),),body: Center(child: Container(child: Text('Hello World'),),),),);}
}
参考链接:
- Dart中的Isolate: https://blog.csdn.net/joye123/article/details/102913497
- Dart 语言异步编程之Isolate:https://cloud.tencent.com/developer/article/1507841
Flutter中的isolate-spawn(一)相关推荐
- flutter中compute和isolate
async和await: 对于普通的任务,使用async和await可实现异步处理任务,而async的处理方式并非使用的是多线程,而是依然在UI线程中处理任务,是在同一个线程上的并发操作. 对于比较繁 ...
- Isolate microTask event Isolate.spawn() compute
我们的flutter应用启动的时候就会开辟一个独立的ioslate,这里面包含了一个独立的内存空间和一个携带 event loops的单一线程和 microTask queue(微任务队列),这个单一 ...
- flutter中的路由跳转
在前面的基本路由和命名路由中,都演示了如何进行路由跳转,并且在路由跳转以后,可以借用系统自带的按钮就行返回上一级,当然了,也可以自定义按钮返回上一级. 返回上一级 在前面的例子中,当从Home.dar ...
- flutter中的生命周期
前言 和其他的视图框架比如android的Activity一样,flutter中的视图Widget也存在生命周期,生命周期的回调函数提现在了State上面.理解flutter的生命周期,对我们写出一个 ...
- 一招教会你处理Flutter中的数据
目录传送门:<Flutter快速上手指南>先导篇 在一个 App 中,数据类是必不可少. 我们需要从接口请求数据(通常为 JSON 格式),然后解析成对象,再使用它. 看看在 Flutte ...
- flutter中的生命周期函数
前言:生命周期是一个组件加载到卸载的整个周期,熟悉生命周期可以让我们在合适的时机做该做的事情, flutter中的State生命周期和android以及React Native的生命周期类似. 先看一 ...
- 在Flutter中嵌入Native组件的正确姿势
引言 在漫长的从Native向Flutter过渡的混合工程时期,要想平滑地过渡,在Flutter中使用Native中较为完善的控件会是一个很好的选择.本文希望向大家介绍AndroidView的使用方式 ...
- mvp 在 flutter 中的应用
在 Android 应用程序开发过程中,我们经常会用到一些所谓的架构方法,如:mvp,mvvm,clean等.之所以这些方法会被推崇是因为他们可以大大的解耦我们的代码的功能模块,让我们的代码在项目中后 ...
- element中有多个合计_深入理解 Flutter 中的 Widget, Element, RenderObject
这篇文章基于 Flutter stable v1.7 总结下 Flutter 当前的 UI 系统以及相关的概念, 在最后会通过自己组合一个 Gradient Button 按钮的方式来熟悉 Flutt ...
最新文章
- c mysql批量插入优化_MySQL实现批量插入以优化性能的教程
- 图形处理(四)基于梯度场的网格编辑-Siggraph 2004
- PUCCH Format
- python butter带通滤波器滤波出来的信号有NAN值或者分类效果极差
- linux找数组规矩,linux shell 数组建立及使用技巧(示例代码)
- 计算机做镜像步骤,如何将当前的操作系统做成镜像?
- ajax提交数据遇到400异常,原因及解决方案
- MongoDB配置主从同步(二)
- StringUtils工具类常用方法
- python docx 图片_python-docx设置图片大小和对齐方式
- 搜狐老矣,尚能饭否?
- linux or msys2设置网络代理
- 《深度学习之美》第1章
- 【Python自动化测试】:模拟鼠标操作
- 使用 @Resource或@Autowire时 Idea报错Could not autowire. No beans of 'xxxService' type found. more..出现红色波浪线
- jQuery中常需引用的jquery.min.js文件的内容
- 一只计算机专业学生的【大一年度总结】
- Qt设计机器人仿真控制器——按键控制机器人关节转动
- 以root身份登录ylmf4.0
- 【水文模型】05 参数不确定性分析方法
热门文章
- 打工人,离职也要“躲躲藏藏”
- 看看英特尔安全(迈克菲)的自适应防御体系
- 同程学生卡怎么开通,开通同程旅行学生会员开通方法
- 索尼前CEO平井一夫今日正式退休 结束35年索尼生涯
- 苹果新品“翻车”后,官方回应来了!
- 端午节加班的我,跟大家汇报一下创业阶段性成果!
- 企业估值指标-每股收益、稀释每股收益、市盈率、市净率、息税前利润、息税折旧及摊销前利润...
- 【原创:毕业意味着什么】
- SpringBoot整合Redis - @Cacheable 和 RedisTemplate
- 如何用python制作静摩擦力模拟器 python项目小发明 【安安教具】-【物理】-【静摩擦力】模拟器