问题标签 [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 投票
1 回答
74 浏览

dart - 如何从隔离中得到简单的答案?

我正在学习Isolate's。我阅读了文档。并想编写最小的工作示例。这是我的代码:

几乎没问题,但我不明白如何发回简单的“Hello”消息。我看了几个例子,有一些中间件,比如sendReceive(). 我正确理解之后:

sendPort将存储生成函数的名称/地址,我需要sendPort.send("hello");吗?

0 投票
1 回答
220 浏览

dart - await for(var msg in receivePort) 和 receivePort.listen() 有什么区别?

我正在学习飞镖:

我不明白什么时候使用更好,什么await for(var msg in receivePort)时候使用receivePort.listen()?乍一看,它也是如此。或不?

0 投票
2 回答
86 浏览

dart - 如何关闭 receivePort 以使 .toList() 方法正常工作?

我正在尝试从 Isolate 作为列表中获得答案。我写了下一个代码。问题是它不起作用。这只是等待。

0 投票
2 回答
3528 浏览

plugins - 无法理解“找不到‘Window_sendPlatformMessage’(4 个参数)”错误的 Flutter Isolate 解决方法

我正在将一个非常简单的标签打印应用程序转换Flutter为 Swift。这个应用程序的一个主要组件是本地缓存的数据库,用于离线访问产品。

虽然我可以在主线程上下载和缓存所有 12,000 多种产品,但对于如此繁重的操作来说,这是一个糟糕的、糟糕的解决方案,我真的很想避免这种情况,除非万不得已。即使作为最后的手段,如果后台线程无法用于基本任务(例如将在线数据缓存到本地数据库),我也很难说服我的雇主让我从 Swift 迁移到 Flutter。

因此,我一直在探索 Isolates。在此过程中,"'Window_sendPlatformMessage' (4 arguments) cannot be found"每当我尝试使用sqflitepath_providerIsolate.
现在我在githubstackoverflow上读到 Isolates不支持使用插件(可能是包?),除非以一种不稳定的解决方法。我试过一个插件,当我尝试使用它时,它只会让我的应用程序崩溃,并带有一个非常神秘的堆栈跟踪,所以看起来解决方法是唯一的方法。

大约一周前我刚刚开始使用 Flutter 构建,并且大约两天前才开始使用 Isolates,所以我对所有内容的基本了解目前都很浅。在颤振 repo 上,有一条评论似乎概述了插件问题的解决方法,我希望它可以让我使用path_providersqflite缓存从我的 web API 获取的数据。

一个更有经验的 Flutter 开发者能否将这个解释分解成婴儿咬伤?


编辑:

正如下面的答案所述,sqflite它已经是异步的,并且显然在与主线程不同的线程上运行,所以看起来我的具体情况将通过使用计算来解决我的 dart-pure API 调用以获取 JSON 数据并使用常规sqflite用于存储。尽管如此,仍然需要一个不稳定的 Isolate 解决方法的初学者指南,所以我将这个问题留着。

0 投票
0 回答
516 浏览

flutter - Flutter Isolate 图像处理内存问题

我正在开发一个颤振应用程序,它在列表中显示许多未知纵横比的图像(除其他外)

为了改善用户体验,带有图像的行在背景中(在堆栈中)显示带有模糊版本的原始图像。

  • 要创建模糊版本,我使用image库(https://pub.dev/packages/image
  • 为了不通过解码、模糊和编码阻塞 UI 线程,我使用隔离

但是经过一些测试后,我一直面临内存问题-隔离似乎没有正确清理(尽管在图像处理完成后将其杀死)

到目前为止,应用程序因“内存不足”而崩溃(Android 和 iOS)

我尝试过的事情:

  • compute颤振中的方法(仍然泄漏)
  • isolate包(https://pub.dev/packages/)(仍在泄漏)
  • Future.microtask- 不泄漏,但阻塞 UI 线程。

其他人有类似的问题吗?

0 投票
0 回答
1163 浏览

flutter - Dart/Flutter:如何在无限循环中最好地处理硬件事件

我有一个无限循环,它在 Flutter 应用程序的异步函数中运行(虽然代码是纯 Dart,但没有使用 Flutter API)。

基本上,它处理一些数学内容,但我希望能够使用来自硬件的事件(在这种特定情况下来自麦克风)更新要处理的数据。

为了让快速while(true)有机会从外部获取事件,我添加了一个持续时间为零的延迟。

尽管这似乎在大多数平台上都有效,但Future.delayed像这样调用会使这个循环比我想要的慢得多。问题是是否有更好(更快)的方法来做到这一点。这对我来说甚至看起来有点像黑客。我尝试Future.delayed只在一定数量的迭代中调用一次,但即使每 10 次迭代调用一次,系统也会丢失事件。

顺便说一句,processMathStuff内部不包含循环,所以它实际上是 O(1)。

注意:如果我将代码移动到 Isolate,如果while(true)缺少那种“yield”,我会遇到类似的问题,即 Isolate 不听 sendPort 的东西。

0 投票
1 回答
852 浏览

dart - 为什么 Dart 隔离中的流在没有接收端口的情况下不起作用

当我尝试在隔离内使用流时,我遇到了一个奇怪的问题,如果我尝试这样的事情

控制台没有打印任何内容,但是如果我在主方法中添加一个接收端口,它工作正常,即使我不使用接收端口

这是一个错误还是我有什么问题?

0 投票
1 回答
164 浏览

dart - Dart 程序究竟何时终止?

我想知道 Dart 程序何时终止。

采取以下程序:

在这里,主隔离生成另一个隔离,该隔离在一秒后仅发送 42。发送答案后,隔离终止,导致退出侦听器触发。实际上,程序输出 42,然后输出 100,因此隔离终止。

但 Dart 程序仍在继续运行。为什么?

0 投票
2 回答
685 浏览

flutter - 使用 Isolate 对列表进行排序

我有一个非原始列表,我想对其进行排序。

当我对其进行排序时,UI 线程被阻塞并且应用程序冻结了几秒钟。

我试图通过使用 dart 的 Isloate计算函数来避免这种情况,但由于发送到计算函数的参数必须是原语或原语列表/映射(发送方法),所以它不起作用。

总而言之,有没有办法在不阻塞 UI 线程的情况下执行列表排序(非原始)?

编辑:澄清 - 我试图通过计算调用一个函数,并且我正在传递一个对象列表(我从第三方插件获得)作为参数,这些对象具有 Iterable 类型的属性并且导致一切失败 -确保所有类型都是原始类型或原始列表/映射。随着我收到的答案并将类型从 Iterable 更改为 List 它有效。

0 投票
1 回答
1403 浏览

flutter - 我可以将 BuildContext 传递给 Compute 吗?

是否可以在计算函数中使用 BuildContext?

尝试传递contextto时收到以下错误compute

如果我将计数函数的输入更改为其他普通类,它工作正常。

有没有什么办法解决这一问题?或者是否可以在Isolate中使用 BuildContext ?谢谢!