【Flutter小记5】Isolate && ffi && Method Channel 使用简介与总结
  il09ZWRKkpXw 2023年11月02日 33 0


一.  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 主要优势:

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 返回值使用结构体时,尽量不要使用结构体指针数组!可以嵌套结构体,但是不要嵌套结构体指针数组,不然很容易异常!

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  iD7FikcuyaVi   2023年11月30日   26   0   0 MacWindowsandroid
  b1UHV4WKBb2S   2023年11月13日   40   0   0 裁剪ideflutter
  b1UHV4WKBb2S   2023年11月13日   29   0   0 flutterDart
il09ZWRKkpXw