我知道这些库flutter_isolate和isolate_handler存在支持执行这些操作,但我找不到任何方法来从它们内部调用特定于平台的代码。有人可以展示它是如何完成的任何例子吗?
问问题
169 次
1 回答
0
我的回答可能不会直接回答您的问题,但我面临同样的情况。我正在为此工作以运行计算密集型任务,避免 UI 滞后。经过长时间的研究,不,您不能从其他隔离区而不是主要隔离区运行平台。
与其在另一个隔离体上制作和运行本机代码,不如让本机代码在后台运行,而不是使用TaskQueue
.
通道和平台线程
上面链接中的示例代码正在使用onAttachedToEngine
,您可以查看一下。但是,我使用的是 isconfigureFlutterEngine
所以我必须弄清楚一点,直到找到一个我需要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
本机代码将准备好在后台运行。
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
}
}
本机代码现在以非阻塞方式运行,不再有 UI 滞后。:)
于 2022-02-16T08:20:31.827 回答