【Flutter小记5】Isolate ffi Method Channel 使用简介与总结
一. Method Channel:
在做部分定制功能的需求,我们总避免不了要与原生平台做交互
iOS 平台 : dart -> oc / swift
Android 平台: dart -> java/kotlin
那么Flutter 为我们提供了比较便捷的 Method Channel 方式来与原生代码进行交互,具体不赘述,看官方文档:
撰写双端平台代码(插件编写实现) - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter
注意:使用Method Channel 前记得先:
WidgetsFlutterBinding.ensureInitialized();
二. dart 中的 isolate 线程
有时候我们为了不影响UI展示的流畅度,会新起一个线程,做一些事情。dart 提供 isolate 线程,至于isolate 的基础使用,大家请自行搜索,这里不赘述。
强调一点:Method Channel 方式有个最大的弊端:
只能在主线程使用,那么如果我们想在另起一个 isolate上使用是不允许的!
三:ffi
由于dart 提供了ffi (可以直接与c/c++交互) ,类似Android 的jni ,但是要按照要求书写交互代码,如果不使用插件ffigen来生成,谁写谁难受...
ffi 系列文章推荐:01、Flutter FFI 最简示例_又吹风_Bassy的博客-CSDN博客
ffi 主要优势:
1. 与c/c++直接交互
2. 可以直接在任意 isolate 线程中使用
3. 如果使用 c++ 来编写部分功能逻辑,那么Android 与 iOS 代码则通用
总结几点使用需要注意与推荐:
1. 如果项目高频计算量的,很推荐使用 isolate + ffi + c/c++ 来做:(例如 opencv 或者 tflite 相关的逻辑。)独立线程不影响Flutter 主UI线程,且代码执行效率高!
2. 如果使用ffi ,那么:
a) 推荐使用 ffigen ,只需要编写c++ 的.h文件,使用 dart run ffigen 即可生成dart 与 c++ 交互代码!非常推荐! Himi手写过,手写真的有点烦...!
b) ffi 返回值使用结构体时,尽量不要使用结构体指针数组!可以嵌套结构体,但是不要嵌套结构体指针数组,不然很容易异常!
【Flutter小记5】Isolate ffi Method Channel 使用简介与总结相关推荐
- 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | 通信场景 | Channel 通信机制 | Channel 支持的通信数据类型 | Channel 类型 )
文章目录 一.Flutter 和 Native 应用之间的通信场景 二.Flutter 和 Native 的 Channel 通信机制 三.Channel 通信机制支持的数据类型 四.Channel ...
- 【错误记录】Flutter 构建报错 ( Error: Method not found: ‘CupertinoModalPopupRoute‘. | 下载最新 Flutter SDK 版本 )
文章目录 一.报错信息 二.问题分析 三.解决方案 一.报错信息 参考 [Flutter]Flutter Gallery 官方示例简介 博客 ; Flutter Galley 开源项目运行时 , 部署 ...
- 学习flutter小记002 - url_launcher插件使用
1. 引入第三方插件 flutter pub add url_launcher 2. 写调用方法 import 'package:url_launcher/url_launcher.dart';/// ...
- Go语言goroutine+channel+select简介
goroutine: Go语言是原生支持语言级并发的,这个并发的最小逻辑单元就是goroutine.goroutine就是Go语言提供的一种用户态线程,这种用户态线程是跑在内核级线程之上的,gorou ...
- Flutter(一)介绍、Dart语言简介
目录 Flutter介绍 跨平台技术简介 1. 跨平台自绘引擎 2. 高性能 Flutter 为什么选择 Dart 语言? 1.开发效率高. 2.高性能. 3.快速内存分配. 4.类型安全和空安全. ...
- Channel shutdown: channel error; protocol method
Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=406, reply ...
- Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=
完整错误 CachingConnectionFactory.java:1278 - Channel shutdown: channel error; protocol method: #method& ...
- channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILE
问题描述 ** MQ发送异常 ** 详细报错信息 Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; prot ...
- channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no
1.出现Error: {:plugins_not_found, [:"rabbitmq_delayed_message_exchange-3.9.0.ez"]} 或者 channe ...
- flutter入门之理解Isolate及compute ——解决耗时操作卡住UI的问题
这篇文章将会讲解flutter中的Isolate,这有助于帮你解决某些耗时计算问题导致的卡顿. 一 . 原始代码 为什么要Isolate,我们先看一段比较简单的代码: import 'package: ...
最新文章
- python多线程并发_Python进阶记录之基础篇(二十四)
- 百度关键词研究: 应避免的5个错误!
- oppo计算机打不开怎么回事,一体机电脑突然关机了?然后就打不开了怎么回事啊?...
- matlab正弦光栅,科学网—光栅-正弦,矩形 - 宗兆玉的博文
- 【NOI2018】你的名字【后缀自动机】【可持久化线段树合并】【乱搞】
- 【51Nod - 1215 】数组的宽度 (单调栈 或 分治 或 单调队列,算贡献,需去重)
- 用python写一个手机app签到脚本_利用Python实现App自动签到领取积分
- 服务器2012系统在dos卸载,Windows系统下彻底删除Windows.old 文件夹的方法
- 解读Mybatis数据库开发框架
- java操作无符号数
- 拓端tecdat|把握出租车行驶的数据脉搏 :出租车轨迹数据给你答案!
- Android入门笔记13
- VNC viewer双击鼠标出发ctrl+c
- 数据库--分库分表中间件--选型/对比/框架
- 坐标转换程序:布尔沙七参数计算、投影正反算、坐标换带等
- 键盘 BIOS 扫描码和 ASCII 码表
- 商务与经济统计阅读笔记3
- 北京大学生数学建模与计算机应用,2011年北京市大学生数学建模与计算机应用竞赛获奖名单...
- 给MFC控件添加提示信息
- 小说里的管理软件现状