你如何在后台运行任务?

时间:2018-02-28 23:36:37

标签: multithreading flutter

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

我从Flutter那样运行它:

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

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

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

2 个答案:

答案 0 :(得分:7)

你可以尝试一些事情。

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

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

答案 1 :(得分:2)

void click() async{
  var a = wait platform.invokeMethod('runMyLongFunc');
  print("Done");
  setState(() {});
}

等待是关键。尽管它仍然在单线程上运行