返回

【Flutter小记5】Isolate && ffi && Method Channel 使用简介与总结

发布时间:2023-10-29 11:54:39 181


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

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线