В чем разница между написанием моста MethodChannel и моста dart:ffi для запуска кода c/ C++ для получения ответа?

Прежде чем я начну свой вопрос, я хочу указать, что это не похоже на этот вопрос. Разница между написанием кода для конкретной платформы и кода dart:ffi. Здесь задающий вопрос задает реальную разницу, в то время как я пытаюсь узнать разницу для одной и той же задачи, которую можно решить с помощью обоих методов.

Какая разница в запуске нативного кода c/ C++ на платформе, получении результата на стороне платформы (скажем, Kotlin, например) и отправке его в dart через канал метода по сравнению с написанием dart:ffiинтерфейс и напрямую вызывает собственный код C++. По сути, они будут обеспечивать одинаковое выполнение кода. Единственная разница, которую я вижу, заключается в том, что вызов MethodChannel будет асинхронной задачей vsdart:ffiкоторый будет синхронным. Помимо асинхронного поведения, будет ли какая-либо разница (в первую очередь в производительности) в получении ответа от любого из методов.

1 ответ

Вот репозиторий тура для dart:ffi: https://github.com/Sunbreak/native_interop.tour

  1. Асинхронный / Синхронный
  • Для MethodChannel оба и являются асинхронными
  • Для дротика: 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/

Другие вопросы по тегам