Multithreading 颤振插件异步和线程

Multithreading 颤振插件异步和线程,multithreading,asynchronous,dart,flutter,Multithreading,Asynchronous,Dart,Flutter,我有一个flatter应用程序,它使用methodchannel调用Java插件 我试图理解线程模型和异步行为。所以顺序是这样的。。。 UI事件处理程序调用wait methodchannel.invoke(“Foo”,params)。将控制权转移到Java方法调用处理程序。在那里我回答。成功地解除了dart中等待的障碍。等待返回和颤振UI事件处理程序返回 在Java插件中,我将在result.suces之后继续进行更多的工作。再等2秒钟 问题是(我的问题)在这2秒钟内,dart主线程/UI被阻

我有一个flatter应用程序,它使用methodchannel调用Java插件

我试图理解线程模型和异步行为。所以顺序是这样的。。。 UI事件处理程序调用wait methodchannel.invoke(“Foo”,params)。将控制权转移到Java方法调用处理程序。在那里我回答。成功地解除了dart中等待的障碍。等待返回和颤振UI事件处理程序返回

在Java插件中,我将在result.suces之后继续进行更多的工作。再等2秒钟


问题是(我的问题)在这2秒钟内,dart主线程/UI被阻塞,即使颤振事件处理程序在2秒钟前返回?为什么呢?我可以从日志中看到dart和Java代码在两个独立的线程中运行。非常感谢您的回答。

嗯,我对您所描述的问题表示怀疑。您所描述的是真实的,所有Dart代码都是异步的,Dart和Java运行所有不同的线程,因此,除了Dart正在做一些CPU繁忙的事情外,它不应该阻塞主线程/UI。如果这真的发生了,我敢肯定您正在做一些奇怪的事情。另外,不要返回假
success
。回调都是异步的,旨在提供真正的结果。。如果您不想让dart代码“阻塞”,请不要等待。。您可以使用future的
然后
回调来处理结果,或者在另一个隔离中使用
等待
来处理结果。发布java代码:很可能您以某种方式阻止了UI主线程。请看这一点-本机代码在本机UI线程上运行,因此您不应该阻止它,否则可能会导致输入暂停和其他特定于平台的问题。解决方案是在一个单独的线程上再做2秒钟的工作。(上述问题的创作者认为,你应该能够在主线程上进行工作,但似乎没有多少人同意……)重点是有一个简单的工作围绕-背景线程。前几天我以为我看到了一个非常好的3个主要线程的图表,但是现在我再也找不到了。谢谢大家。我对这种行为感到惊讶。但正如@RichardHeap在他的评论中提到的,这是有意为之。平台插件线程与UI线程相同。所以不要阻止它。那么,有人能解释一下这两个线程是什么:一个运行flatter/dart,另一个运行java代码吗?