multithreading - 如何在 Flutter 中在后台运行任务?

我有一个 Kotlin 函数,它需要一段时间,然后会返回一个结果(它会下载并解析一个文件)。

我是这样从 Flutter 运行它的:

void click() {
  platform.invokeMethod('runMyLongFunc').then((a) {
    print("Done");
    setState(() {});
  });
}

我应该怎么做才能在后台线程中运行(目前它在 UI 线程上阻塞)。

我尝试让点击异步,但没有帮助(void click() async)。

最佳答案

您可以尝试几件事。

一种方法是让 Kotlin 函数使用 Android 提供的一种方法(例如,AsyncTask)在后台线程中完成其工作。您可以使用 MethodChannel处理 JVM 和 Dart 之间的通信,并在完成后让 Kotlin 代码发送消息。

另一种可能性是在 Dart 端使用 Dart Isolate 来实现多线程。您将创建一个 Isolate,在其 run 方法中调用 Kotlin,您的其他 dart 代码可以异步等待它在 UI 线程上完成,同时仍在运行事件队列。 Flutter 团队有 an example这可能如何工作。

https://stackoverflow.com/questions/49040421/

相关文章:

dart - 成功验证后不会调用 Flutter TextFormField onSave()

dart - 如何在没有用户交互的情况下发送短信?

dart - 在 flutter 中使用其 GlobalKey 获取 Widget 的高度

flutter - 如何从 Dart 中的 future 返回错误?

flutter - 在 Flutter 的嵌套 Navigator 结构中,如何获取特定的 Navi

flutter - 如何在 Flutter 应用中获取屏幕大小?

flutter - 在创建带有 float 应用栏的应用时使用 StreamBuilder

dart - Flutter 嵌套小部件回调/异步问题

dart - 如何将 showModalBottomSheet 设置为全高?

flutter - 如何在 flutter 应用程序中无上下文导航?