gpt4 book ai didi

flutter - 如何从 flutter 中的 isolate 调用平台代码?

转载 作者:行者123 更新时间:2023-12-05 05:00:47 24 4
gpt4 key购买 nike

我知道这些库 flutter_isolateisolate_handler存在支持执行这些操作但我找不到任何方法来从它们内部调用特定于平台的代码。有人可以展示它是如何完成的任何例子吗?

最佳答案

我的回答可能无法直接回答您的问题,但我遇到了同样的情况。我正致力于此以运行计算密集型任务,避免 UI 滞后。经过长时间的研究,不,你不能从其他隔离而不是主隔离运行平台。

不是在另一个隔离上制作和运行 native 代码,让我们使用 TaskQueue 让 native 代码在后台运行Channels and platform threading

上面链接中的示例代码使用的是onAttachedToEngine,大家可以看看。但是,我使用的是 configureFlutterEngine 所以我必须想出一点点,直到找到一个我需要 binaryMessenger 才能使其工作的解决方案。幸运的是它也可以从 flutterEngine 调用!

这是使用configureFlutterEngine时的示例代码

class MainActivity: FlutterFragmentActivity() {

val MOBILE_SDK_CHANNEL = "com.example.app/flutter"

override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);

super.configureFlutterEngine(flutterEngine)
val taskQueue = flutterEngine.dartExecutor.binaryMessenger.makeBackgroundTaskQueue()

MethodChannel(flutterEngine.dartExecutor.binaryMessenger, MOBILE_SDK_CHANNEL,
StandardMethodCodec.INSTANCE, taskQueue).setMethodCallHandler { call, result ->
// TODO : Do implementation here
when (call.method) {
"example_method" -> {
// success
// result.success(data)
}
else -> result.notImplemented()
}
}
}
}

使用taskQueue, native 代码将准备好在后台运行。

Future<void> getData() async {
if (Platform.isAndroid) {
const platform = MethodChannel("com.example.app/flutter");
var data = await platform.invokeMethod("example_method");
// data is ready to use and non-blocked the UI thread
return data
}
}

native 代码现在以非阻塞方式运行,不再有 UI 延迟。 :)

关于flutter - 如何从 flutter 中的 isolate 调用平台代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62977216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com