问题标签 [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.
dart - 如何从隔离中得到简单的答案?
我正在学习Isolate
's。我阅读了文档。并想编写最小的工作示例。这是我的代码:
几乎没问题,但我不明白如何发回简单的“Hello”消息。我看了几个例子,有一些中间件,比如sendReceive()
. 我正确理解之后:
sendPort
将存储生成函数的名称/地址,我需要sendPort.send("hello");
吗?
dart - await for(var msg in receivePort) 和 receivePort.listen() 有什么区别?
我正在学习飞镖:
我不明白什么时候使用更好,什么await for(var msg in receivePort)
时候使用receivePort.listen()
?乍一看,它也是如此。或不?
dart - 如何关闭 receivePort 以使 .toList() 方法正常工作?
我正在尝试从 Isolate 作为列表中获得答案。我写了下一个代码。问题是它不起作用。这只是等待。
plugins - 无法理解“找不到‘Window_sendPlatformMessage’(4 个参数)”错误的 Flutter Isolate 解决方法
我正在将一个非常简单的标签打印应用程序转换Flutter
为 Swift。这个应用程序的一个主要组件是本地缓存的数据库,用于离线访问产品。
虽然我可以在主线程上下载和缓存所有 12,000 多种产品,但对于如此繁重的操作来说,这是一个糟糕的、糟糕的解决方案,我真的很想避免这种情况,除非万不得已。即使作为最后的手段,如果后台线程无法用于基本任务(例如将在线数据缓存到本地数据库),我也很难说服我的雇主让我从 Swift 迁移到 Flutter。
因此,我一直在探索 Isolates。在此过程中,"'Window_sendPlatformMessage' (4 arguments) cannot be found"
每当我尝试使用sqflite和path_provider在Isolate
.
现在我在github和stackoverflow上读到 Isolates不支持使用插件(可能是包?),除非以一种不稳定的解决方法。我试过一个插件,当我尝试使用它时,它只会让我的应用程序崩溃,并带有一个非常神秘的堆栈跟踪,所以看起来解决方法是唯一的方法。
大约一周前我刚刚开始使用 Flutter 构建,并且大约两天前才开始使用 Isolates,所以我对所有内容的基本了解目前都很浅。在颤振 repo 上,有一条评论似乎概述了插件问题的解决方法,我希望它可以让我使用path_provider
和sqflite
缓存从我的 web API 获取的数据。
一个更有经验的 Flutter 开发者能否将这个解释分解成婴儿咬伤?
编辑:
正如下面的答案所述,sqflite
它已经是异步的,并且显然在与主线程不同的线程上运行,所以看起来我的具体情况将通过使用计算来解决我的 dart-pure API 调用以获取 JSON 数据并使用常规sqflite
用于存储。尽管如此,仍然需要一个不稳定的 Isolate 解决方法的初学者指南,所以我将这个问题留着。
flutter - Flutter Isolate 图像处理内存问题
我正在开发一个颤振应用程序,它在列表中显示许多未知纵横比的图像(除其他外)
为了改善用户体验,带有图像的行在背景中(在堆栈中)显示带有模糊版本的原始图像。
- 要创建模糊版本,我使用
image
库(https://pub.dev/packages/image) - 为了不通过解码、模糊和编码阻塞 UI 线程,我使用隔离
但是经过一些测试后,我一直面临内存问题-隔离似乎没有正确清理(尽管在图像处理完成后将其杀死)
到目前为止,应用程序因“内存不足”而崩溃(Android 和 iOS)
我尝试过的事情:
compute
颤振中的方法(仍然泄漏)isolate
包(https://pub.dev/packages/)(仍在泄漏)Future.microtask
- 不泄漏,但阻塞 UI 线程。
其他人有类似的问题吗?
flutter - Dart/Flutter:如何在无限循环中最好地处理硬件事件
我有一个无限循环,它在 Flutter 应用程序的异步函数中运行(虽然代码是纯 Dart,但没有使用 Flutter API)。
基本上,它处理一些数学内容,但我希望能够使用来自硬件的事件(在这种特定情况下来自麦克风)更新要处理的数据。
为了让快速while(true)
有机会从外部获取事件,我添加了一个持续时间为零的延迟。
尽管这似乎在大多数平台上都有效,但Future.delayed
像这样调用会使这个循环比我想要的慢得多。问题是是否有更好(更快)的方法来做到这一点。这对我来说甚至看起来有点像黑客。我尝试Future.delayed
只在一定数量的迭代中调用一次,但即使每 10 次迭代调用一次,系统也会丢失事件。
顺便说一句,processMathStuff
内部不包含循环,所以它实际上是 O(1)。
注意:如果我将代码移动到 Isolate,如果while(true)
缺少那种“yield”,我会遇到类似的问题,即 Isolate 不听 sendPort 的东西。
dart - 为什么 Dart 隔离中的流在没有接收端口的情况下不起作用
当我尝试在隔离内使用流时,我遇到了一个奇怪的问题,如果我尝试这样的事情
控制台没有打印任何内容,但是如果我在主方法中添加一个接收端口,它工作正常,即使我不使用接收端口
这是一个错误还是我有什么问题?
dart - Dart 程序究竟何时终止?
我想知道 Dart 程序何时终止。
采取以下程序:
在这里,主隔离生成另一个隔离,该隔离在一秒后仅发送 42。发送答案后,隔离终止,导致退出侦听器触发。实际上,程序输出 42,然后输出 100,因此隔离终止。
但 Dart 程序仍在继续运行。为什么?
flutter - 使用 Isolate 对列表进行排序
我有一个非原始列表,我想对其进行排序。
当我对其进行排序时,UI 线程被阻塞并且应用程序冻结了几秒钟。
我试图通过使用 dart 的 Isloate计算函数来避免这种情况,但由于发送到计算函数的参数必须是原语或原语列表/映射(发送方法),所以它不起作用。
总而言之,有没有办法在不阻塞 UI 线程的情况下执行列表排序(非原始)?
编辑:澄清 - 我试图通过计算调用一个函数,并且我正在传递一个对象列表(我从第三方插件获得)作为参数,这些对象具有 Iterable 类型的属性并且导致一切失败 -确保所有类型都是原始类型或原始列表/映射。随着我收到的答案并将类型从 Iterable 更改为 List 它有效。
flutter - 我可以将 BuildContext 传递给 Compute 吗?
是否可以在计算函数中使用 BuildContext?
尝试传递context
to时收到以下错误compute
:
如果我将计数函数的输入更改为其他普通类,它工作正常。
有没有什么办法解决这一问题?或者是否可以在Isolate中使用 BuildContext ?谢谢!