编写 MethodChannel 桥与 dart:ffi 桥来运行 c/c++ 代码以获得响应有什么区别?

Aaw*_*ali 4 c++ dart flutter dart-ffi flutter-method-channel

在开始我的问题之前,我想指出它与这个问题不相似。 编写平台特定代码与 dart:ffi 代码之间的区别。在这里,提问者询问实际的差异,而我试图了解使用两种方法可以实现的相同任务的差异。

在平台上运行原生 c/c++ 代码,在平台端获取结果(例如 Kotlin)并通过方法通道将其发送到 dart 与编写接口dart:ffi并直接调用原生 c++ 代码有什么区别。它们基本上将提供相同的代码执行。我看到的唯一区别是 MethodChannel 调用将是异步任务与dart:ffi同步任务。除了异步行为之外,从任一技术获取响应是否会有任何差异(主要是性能)。

Sun*_*eak 7

这是 dart:ffi 的游览存储库:https ://github.com/Sunbreak/native_interop.tour

  1. 异步/同步
  • 对于 MethodChannel, 和Dart -> Native都是Native -> Dart异步的
  • 对于 dart:ffi,Dart -> Native并且Native -> Dart可以是同步的(除了来自 Isolate 的非变异线程的本机调用)
  1. 记忆
  • 对于MethodChannel,每个互操作都需要序列化/反序列化
  • 对于 dart:ffi,您可以轻松编写类似 C 的内存高效操作
  1. 表现

dart:ffi同步互操作对非频繁小数据有很好的优势

https://www.xdea.xyz/2020/11/flutter-platform-channel-%e6%80%a7%e8%83%bd%e6%b5%8b%e8%af%95/