В чем разница между написанием моста 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
- Асинхронный / Синхронный
- Для MethodChannel оба и являются асинхронными
- Для дротика: ffi,
Dart -> Native
а такжеNative -> Dart
может быть синхронным (кроме собственного вызова из немутаторного потока Isolate)
- объем памяти
- Для MethodChannel каждое взаимодействие требует серилизации / десерилизации
- Для dart: ffi вы бы легко написали C-подобную операцию с эффективным использованием памяти
- Представление
dart: синхронное взаимодействие ffi имеет хорошее преимущество при нечастых небольших данных
https://www.xdea.xyz/2020/11/flutter-platform-channel-%e6%80%a7%e8%83%bd%e6%b5%8b%e8%af%95/