问题标签 [dart-isolates]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
9327 浏览

dart - Flutter 隔离与未来

我可能对孤立和未来有错误的想法。请帮我清理一下。这是我对这两个主题的理解。

隔离:在自己的事件循环中隔离运行代码,每个事件都可以在嵌套的微任务队列中运行较小的任务。

Future:Future 用于表示将来某个时间可用的潜在值或错误。

我的困惑是:

  1. 医生说 Isolate 有它自己的循环?我觉得拥有自己的事件队列对我来说更有意义,我错了吗?

  2. 未来是否在主 Isolate 上异步运行?我假设未来的任务实际上被放置在事件队列的末尾,所以如果它将来会被循环执行。如我错了请纠正我。

  3. 为什么在有未来时使用 Isolate?我看到了一些使用 Isolate 代替 Future 来完成繁重任务的示例。但为什么?只有当将来在主隔离队列上异步执行时,它才对我有意义。

0 投票
3 回答
2939 浏览

flutter - 在调试与发布模式下颤动不同的行为

我正在为颤振应用程序开发这些功能:从图库中加载图像,调整大小并保存。

调整大小部分是 cpu 密集型操作,因此我按照此处建议的方法使用隔离来获得更好的用户体验。

当我在调试模式下运行代码时没有问题,但是当我在发布模式下尝试相同的代码时,我的图像以错误的方式保存。

有人可以帮我理解我解释的问题吗?

我仅在此设备上测试代码:HUAWEI P9 lite VNS-L31 with android 7.0

这是复制问题的代码。这是一个新的颤振项目,包含以下文件:

pubspec.yaml我添加此部分:

所有代码都在lib/main.dart

flutter doctor -v

0 投票
3 回答
3610 浏览

dart - 颤振(飞镖)能够在单独的隔离中发出 api 请求吗?

我做了一个功能来发布一个主题的通知。它在正常情况下工作得很好,然后我把它放在计算功能中,希望它可以在后台发布通知。但它不起作用。这是我的代码:

调用计算:

注意:正如图书馆所说,我已将 onSendMessageInBackGround 函数放在我的应用程序的顶层

它缺少什么吗?或者我们不能这样做?

0 投票
3 回答
5143 浏览

mobile - Dart - 在生成多个隔离时在控制台中获取“格式错误的消息”

我是飞镖的新手,我正在尝试使用隔离运行多种算法以更有效地多次运行它们,但是,当使用 Isolate.spawn 调用多个函数时,我开始在控制台中收到“格式错误的消息”,它仍然有效,但我想知道为什么我会收到此消息,也欢迎任何改进代码的帮助,因为我仍在学习使用隔离的复杂性

DoubleTest、StringStress 和 IntegerTest 是向 sendPort 返回一个 stopwatch.toMilliseconds 整数的函数。

在此先感谢,任何帮助表示赞赏

0 投票
2 回答
773 浏览

flutter - Flutter中Completer和Isolates的解释和区别

我需要在我的应用程序上返回一个 Future,因为我认为我的功能需要太多时间才能完成。

所以我得到了两个可能的答案:使用CompleterIsolate

是什么让我选择其中之一?我可以在任何我想要的地方放置一个 Completer 并相信它会正常工作吗?

这是如何工作的?就像.. Flutter 必须以 60fps 的速度在屏幕上绘制,对吗?那么,它会在画布上绘制之后和下一次绘制之前计算这些东西吗?我很好奇,因为 Flutter 不是多线程的(但似乎隔离可以做到这一点)。所以我很困惑,不知道如何编写可信赖的代码。

而且,是否有理由不使用 Completer?就像,我认为我的代码花费了太多时间,但也许不是。是否有理由检查完成所需的时间,如果它低于阈值我不应该使用它?

提前致谢。

0 投票
1 回答
1249 浏览

dart - 飞镖中单独隔离的最大内存是多少

我正在学习 dart/flutter 中的隔离,在几乎文档中说隔离不共享内存,但它没有说明隔离中有多少最大内存。它是受应用程序最大内存限制还是每个隔离都有单独的内存空间并且不依赖于应用程序分配的总初始内存?

感谢您的帮助。

更新

我在Dart 词汇表中找到了信息:“ Dart 通过隔离支持并发执行,您可以将其视为没有开销的进程。每个隔离都有自己的内存和代码,不受任何其他隔离的影响

0 投票
1 回答
3125 浏览

android - 从后台颤振隔离向Android方法发送平台消息

我想让一个飞镖后台服务永远运行(隔离),它将通过 websockets 与服务器通信。我有一个适用于 Android 的 API,它收集信息以发送到服务器。如何调用使用回调的 Android 方法以及来自后台隔离的所有内容?

编辑

到目前为止,在 dart 中,我创建了一个 Isolate 以在后台定期调用 poolSong 方法,即使用户正在使用另一个应用程序或屏幕已关闭。

但这给了我下面的错误......在 github 问题上,他们说我不能从不同的 Isolate 发送平台消息,除非它是主要的。但是,如果我从主隔离中执行此操作,则当用户退出应用程序时,隔离也将终止。

主要飞镖

MainActivityJava

错误

0 投票
2 回答
1401 浏览

dart - Flutter - 找不到“Window_sendPlatformMessage”(4 个参数)

我正在使用 Flutter 开发一个应用程序,该应用程序获取图像并允许用户将其保存在图库中。

我正在使用image_picker_saver插件来保存它。

一开始我在调用将图像保存在主线程中的方法,但我意识到这真的很慢,现在我试图把它放在一个新的隔离线程中,但我总是遇到同样的错误,所以,我的问题是:如何调用该方法将图像保存在新的隔离线程中?

我的代码如下所示:

主要.dart

toCompute.dart

我尝试更改代码以尝试定位错误,但始终相同:

有人有任何线索吗?提前致谢

编辑

我把问题放在 GitHub 上,基本上插件只能在主 UI 线程中使用。

找不到“Window_sendPlatformMessage”(4 个参数)

0 投票
1 回答
1552 浏览

flutter - 重新打开 App 后是否可以在 Flutter 中获取现有 Isolate 的实例?

我正在使用飞镖隔离在背景中播放音乐。我想获取我之前生成的隔离实例,以在关闭并重新打开 Flutter 应用程序后停止音乐。

重新打开 Flutter 应用程序后,有没有办法获取现有隔离的实例?

0 投票
1 回答
919 浏览

android - Flutter 繁重的平台代码导致 UI 滞后

MethodChannel.invoke用来调用一些平台代码以将应用程序图标返回为Uint8Lists。这发生在设备上所有应用程序的列表(可能很多)上,显示为FutureBuilders 中的 s ListView.builder

这在 中快速滚动时会导致很多卡顿ListView,因此我对其进行了更改,以便在显示 ListView 之前预加载所有应用程序图标。这修复了滚动,但是在加载图标时 UI 非常卡。

我相信这个问题可能和这个问题一样,我不应该像现在这样在 UI 线程上加载图标。但是,查看文档compute,我认为我无法使用它来调用平台代码。

还有其他方法可以避免 UI 滞后吗?