我有一个Kotlin函数需要一段时间,然后会返回一个结果(它下载并解析一个文件)。
我从Flutter那样运行它:
void click() {
platform.invokeMethod('runMyLongFunc').then((a) {
print("Done");
setState(() {});
});
}
我应该怎么做才能在后台线程中运行(截至目前它在UI线程上阻塞)。
我尝试点击异步并没有帮助(void click() async
)。
答案 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(() {});
}
等待是关键。尽管它仍然在单线程上运行