2

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

4

1 回答 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 回答