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

Posted 李华明Himi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter小记5Isolate && 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小记5Isolate && ffi && Method Channel 使用简介与总结的主要内容,如果未能解决你的问题,请参考以下文章

Flutter小记4Android手动设置Camera焦点没效果的解决方案&&CameraImage转YUV或RGBA要注意!

Flutter小记4Android手动设置Camera焦点没效果的解决方案&&CameraImage转YUV或RGBA要注意!

Flutter小记

Flutter小记

Flutter小记

Flutter小记7​Mac M1 使用 pod install编译常见两种错误解决方案(CocoaPod Error | LoadError)