问题标签 [stateflow]

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 回答
60 浏览

android - 防止同时执行两个挂起函数的一部分

我有两个在 ViewModel 中并行启动的挂起方法:

但是,我想防止_viewState.value = _viewState.value.copy...在我的两种方法中同时执行这些部分。实现这一目标的最佳方法是什么?

0 投票
0 回答
79 浏览

matlab - 是否可以在 MATLAB/Simulink 中以编程方式启动 Stateflow 的符号向导?

如果我要通过运行仿真或更新图表 (Ctrl + D) 手动尝试解析带有未解析符号(即未在模型资源管理器中声明的变量)的 Stateflow 图,那么 MATLAB 将启动符号向导,该向导提供符号定义建议可以接受、修改或拒绝。

符号向导示例

但是,如果我要通过 MATLAB 代码按照以下行以编程方式从同一模型更新图表,则符号向导不会打开:

set_param(mdl_handle,'模拟命令','更新');

在这种情况下,跳过符号向导步骤,并打开诊断查看器告诉我解析错误。

在这种情况下,有没有办法以编程方式启动符号向导?

0 投票
1 回答
1468 浏览

android - Kotlin 结合了 2 个以上的流程

我正在寻找组合 4 个 StateFlow 值并从中生成 1 个 StateFlow。我已经知道这样的组合功能:

这怎么能用 4 个流来完成?当我尝试以下操作时,我得到了参数太多的错误,但是组合函数文档确实说你最多可以添加 5 个流?

0 投票
1 回答
443 浏览

android - StateFlow Observer 被触发两次 - 这是一个好的解决方案吗?

好的,我已经将 StateFlow 与 Room 数据库一起使用了一段时间。现在我有一个常见的案例。在我的应用程序开始时,我有一个逻辑,如果 ROOM 数据库为空,我应该显示一个 EmptyContent(),否则我将显示 ROOM 数据库中的 ListContent()。

现在每次我启动应用程序时,我总是让 EmptyContent() 显示半秒钟,然后显示 ListContent()。之后,当我使用该应用程序时,一切正常。但是在那个应用程序启动时,我猜在 ROOM 数据库工作时, EmptyContent() 只显示了一小段时间(因为我的 StateFlow 默认值是一个空列表),然后显示来自数据库的实际 LIST .

现在我有一个解决方案,只需在协程中使用 delay() 函数,等待例如 200MS,然后触发读取 DATABASE 的函数,因为这 200MS 足以让 ROOM 数据库实际获取值并更新我的使用实际数据的状态流变量,而不是在开始时使用状态流默认值半秒。

我必须问,这是一个好的解决方案吗?因为我使用的是协程,所以线程没有被阻塞,我只是在等待 ROOM 数据库第二次更新我的 STATE FLOW 变量。

0 投票
0 回答
115 浏览

arrays - Stateflow 的输出数组的大小不断增加,我只想从最后一个时间步获取数组

我正在从 Simulink R2016a 中的 Stateflow 图生成一个信号,该信号将连接到实时机器和力传感器,但现在,我只是用正弦波进行调试。Stateflow 中最终输出的信号大小为 6 x 5 数组。但是,当我使用 To Workspace Simulink 模块将其发送到基本工作区时,一旦仿真完成,我会得到一个更大的数组。具体来说,当我将它发送到二维数组时,它是一个 91056 x 5 二维数组,大部分都是零。

出于好奇,我将其更改为将 2D 数组输出为 3D 数组,它是一个 6 x 5 x 15176 数组,并且只有最后一个 2D 数组具有非零列。

这表明我在我的 Stateflow 图中进行了疏忽,并且在每一步都输出了数组。我宁愿保留最后一个二维数组,因为在模拟过程中我只需要它用于以后的计算(尽管我只对前半部分感兴趣)。

有没有一种简单的方法可以在前半部分仿真结束后使用 Simulink 块只保留最后一个数组,以便在后半部分使用它,还是我需要开发一个聪明的 Matlab 用户定义功能块?

我已经尝试创建一个我认为可以工作的函数,但我没有任何运气来减小大小。事实上,x_inx_out在模拟结束时的大小是一样的。

附录 我只是尝试使用运行的更简单的 Matlab 功能块

然后我把信号通过一个重塑块。重塑块

它没有给出预期的结果,这是错误消息。

'x_out' 被推断为可变大小矩阵,但其大小被指定为继承或固定。验证“x_out”是根据非可调参数定义的,或选中“可变大小”复选框并在“大小”框中指定上限。

我在尝试调试代码时遇到了类似的错误,并且我已经设置了输出的大小。但是我在这里尝试这样做,但代码仍然无法编译。

0 投票
0 回答
439 浏览

android - 使用 StateFlow 和分页 3 的 Android MVI

我正在尝试使用状态流和分页 3 来实现 android MVI 架构,但是当我有一个包含分页数据的视图状态时我感到困惑。

问题是我将视图模型中的视图状态公开为状态流对象,但现在在该视图状态中,我有另一个来自分页库的流对象。

在状态流中有一个流可以吗?如果不是我应该怎么做?

这是我的代码以进行更多说明。

任务库

任务视图模型

任务列表视图状态

任务列表片段

0 投票
0 回答
28 浏览

matlab - 给定它以编程方式处理的情况下,如何获取 Matlab StateFlow 输入的端口号?

我有来自先前查找结果的 StateFlow 输入句柄。我正在尝试获取该 StateFlow 输入的端口号。我一直在对“data.name”、“data.scope”等其他字段使用 sf('get',[handle#],[field name]) 命令。例如,如果我给出下图发出命令,sf('get',301,'data.name') 返回结果'ABS_Vehicle_Speed'。但是,在此示例中,我似乎无法弄清楚获取当前端口号 4 的命令。谁能帮我这个?

在此处输入图像描述

0 投票
1 回答
1073 浏览

android - StateFlow 和 LiveData 有什么区别?

正如我在标题中提到的,我很好奇两者之间的一般差异。你能帮忙吗?我找不到具体的区别,因为互联网上有复杂的例子。

  1. 在性能方面有什么区别?
  2. 在哪些场景下有优势?
  3. 将 StateFlow 与 Kotlin Flow 结合使用是有利的。但是在使用 LiveData 的项目中不切换到 StateFlow 的风险是什么?
  4. Google 是否会弃用 LiveData?:)
0 投票
1 回答
291 浏览

android - 我一次可以观察多少个 Stateflow?

我为 Android 开发应用程序。我想知道我一次可以观察多少个 Kotlin Stateflow?我所做的每一observe件事都是在我自己创建的不同的 CoroutineScope 上完成的,由 IO 调度程序调度或由 Android 框架的生命周期组件提供。

我已经完成了各种操作,例如在协程内的无限循环中进行简单的添加以及使用 Android Studio 分析器,我观察到启动大量执行计算的协程会导致 CPU 负载过高。

考虑到Stateflow 永远不会完成,它的每次收集都会阻塞并在不同的 CoroutineScope 上完成,例如示例和文档所说,我一次可以观察到的最大 Stateflow 数量是多少,而不必担心我会高度使用 CPU,创建太多线程或只是简单地用完设备资源?

0 投票
0 回答
291 浏览

android - 片段恢复时如何避免repeatOnLifecycle一次又一次地执行

导航回片段时,如何避免再次执行 collect{} 代码。

视图模型类

当我首先更改 viewModel 中的 _commitResult 值时,跳转到另一个片段工作正常。不幸的是,当我回到片段时。collect{ // navigate to another fragment}将再次执行。

我知道什么时候回到片段。onCreateView 再次执行,viewModel 将在之前发出数据存储,所以collect { // navigate to another fragment}执行。我怎样才能避免这种情况?

与 LiveData 相同,我使用 Event 通过 LiveData 解决此问题。

我怎样才能用状态流处理这个?实际上我不喜欢 Event<.> 来处理这个,我是否以错误的方式使用状态流?我该如何解决这个问题?如果有人可以提供帮助,请提前致谢。