一.  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 使用简介与总结相关推荐

  1. 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | 通信场景 | Channel 通信机制 | Channel 支持的通信数据类型 | Channel 类型 )

    文章目录 一.Flutter 和 Native 应用之间的通信场景 二.Flutter 和 Native 的 Channel 通信机制 三.Channel 通信机制支持的数据类型 四.Channel ...

  2. 【错误记录】Flutter 构建报错 ( Error: Method not found: ‘CupertinoModalPopupRoute‘. | 下载最新 Flutter SDK 版本 )

    文章目录 一.报错信息 二.问题分析 三.解决方案 一.报错信息 参考 [Flutter]Flutter Gallery 官方示例简介 博客 ; Flutter Galley 开源项目运行时 , 部署 ...

  3. 学习flutter小记002 - url_launcher插件使用

    1. 引入第三方插件 flutter pub add url_launcher 2. 写调用方法 import 'package:url_launcher/url_launcher.dart';/// ...

  4. Go语言goroutine+channel+select简介

    goroutine: Go语言是原生支持语言级并发的,这个并发的最小逻辑单元就是goroutine.goroutine就是Go语言提供的一种用户态线程,这种用户态线程是跑在内核级线程之上的,gorou ...

  5. Flutter(一)介绍、Dart语言简介

    目录 Flutter介绍 跨平台技术简介 1. 跨平台自绘引擎 2. 高性能 Flutter 为什么选择 Dart 语言? 1.开发效率高. 2.高性能. 3.快速内存分配. 4.类型安全和空安全. ...

  6. Channel shutdown: channel error; protocol method

    Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=406, reply ...

  7. Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=

    完整错误 CachingConnectionFactory.java:1278 - Channel shutdown: channel error; protocol method: #method& ...

  8. channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILE

    问题描述 ** MQ发送异常 ** 详细报错信息 Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; prot ...

  9. 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 ...

  10. flutter入门之理解Isolate及compute ——解决耗时操作卡住UI的问题

    这篇文章将会讲解flutter中的Isolate,这有助于帮你解决某些耗时计算问题导致的卡顿. 一 . 原始代码 为什么要Isolate,我们先看一段比较简单的代码: import 'package: ...

最新文章

  1. python多线程并发_Python进阶记录之基础篇(二十四)
  2. 百度关键词研究: 应避免的5个错误!
  3. oppo计算机打不开怎么回事,一体机电脑突然关机了?然后就打不开了怎么回事啊?...
  4. matlab正弦光栅,科学网—光栅-正弦,矩形 - 宗兆玉的博文
  5. 【NOI2018】你的名字【后缀自动机】【可持久化线段树合并】【乱搞】
  6. 【51Nod - 1215 】数组的宽度 (单调栈 或 分治 或 单调队列,算贡献,需去重)
  7. 用python写一个手机app签到脚本_利用Python实现App自动签到领取积分
  8. 服务器2012系统在dos卸载,Windows系统下彻底删除Windows.old 文件夹的方法
  9. 解读Mybatis数据库开发框架
  10. java操作无符号数
  11. 拓端tecdat|把握出租车行驶的数据脉搏 :出租车轨迹数据给你答案!
  12. Android入门笔记13
  13. VNC viewer双击鼠标出发ctrl+c
  14. 数据库--分库分表中间件--选型/对比/框架
  15. 坐标转换程序:布尔沙七参数计算、投影正反算、坐标换带等
  16. 键盘 BIOS 扫描码和 ASCII 码表
  17. 商务与经济统计阅读笔记3
  18. 北京大学生数学建模与计算机应用,2011年北京市大学生数学建模与计算机应用竞赛获奖名单...
  19. 给MFC控件添加提示信息
  20. 小说里的管理软件现状

热门文章

  1. 【游戏教程】《星界边境》游戏2D角色分析(一)跳跃、移动、站立动作拆分
  2. 商业力:开发者一站式服务
  3. mysql查看表内容_在mysql中怎样显示表里的内容 ?
  4. 关于Bundle Adjustment(BA)的直观理解
  5. 07 Java 工程师面试技巧篇
  6. Java中Scanner的进阶---求和与求平均数
  7. 《我的博客》之选择公共博客平台还是自建博客站点
  8. 基于Android的无线视频监控的设计与实现 -- 开题报告
  9. 恒玄BES调试笔记-BES2500啸叫howling
  10. Wireshark文档阅读笔记-TCP Flags