问题标签 [kotlin-sharedflow]
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.
kotlin - LiveData 转换为 StateFlow / SharedFlow
StateFlow / SharedFlow 中这种实时数据转换的等效代码是什么?
基本上,我想听每个查询更改以响应返回的内容。所以,任何类似于使用 StateFlow / SharedFlow 的东西都是受欢迎的。
kotlin - 将 MutableSharedFlow 与标准 Flow 结合使用
我不确定如何解决这个问题。我有一个存储combine
流的变量。我必须结合 MutableSharedFlow 和 Flow。这是我使用的代码
这里是 reloadUsers 的定义
这是nicknameQuery的定义
我使用 nickbnameQuery 在昵称中运行查询并使用 reloadUsers 强制从网络获取。
在视图模型中,我使用此代码更新 reloadUsers
我的问题是当我在 reloadUsers 上运行 Refresh.FORCE 后更改nicknameQuery 的值时。因为每次我更改nicknameQuery 时,都会执行combine,但是在reloadUsers 中我再次FORCE。我想将 MutableSharedFlow 用作“触发器”,因此只有在我想强制它时才会强制重新加载。我应该重置 SharedFlow 的值,但我该如何正确处理呢?
android - Android - MutableSharedFlow 无法收集多个订阅者的新值
我想创建一个共享视图模型,用于 MainActivity 与片段之间的通信。我决定使用共享流来管理事件。
我不需要缓存最后一个事件,即使方向改变也是如此。所以我设置了“replay = 0”
当我仅在主要活动中收集事件时 - 一切正常:
将第二个订阅者添加到另一个片段时 - 两个订阅者在第一个之后都停止接收事件(第一个事件发送成功..)我可以做些什么来订阅多个 MutableSharedFlow?我试图增加“重播”的数量并更改“onBufferOverflow” - 似乎没有任何效果..
kotlin - Kotlin SharedFlow 组合操作。在特定情况下具有 zip 行为
我将两者结合起来SharedFlows
,然后执行长时间的工作。
一开始,我知道状态,所以我为两个流发出一个“起始值”。之后,用户可以向任一流发出。
两个流大多是独立的,但在特定情况下,用户可以同时向两个流发出。这样做的作用是触发了两次组合,并且执行了两次长时间的工作,而实际上,在这种情况下,我只对接收这两个值感兴趣,但只执行一次。
这是我所拥有的:
这可以产生:
或这个:
由于缓冲区溢出,有时我可以实现我想要的(这是最新的),但在其他人身上,我有values 10 - e. Starting to perform a long working job
我不感兴趣的。
有什么办法可以强制,当发射到两个时,只开始一次长时间的工作?
java - 从 Java 收集的 SharedFlow 不起作用
我有一小部分活动需要在后台生成的某些事件上重新启动。由于这将是一个短期的解决方法,我认为侵入性最小的方法是在存储库中拥有一个共享流,从 UI 一路观察,但由于某种原因它不起作用:我可以看到价值发出,但 UI 不对其作出反应。
我当前的代码:
我可以确认事件已发出(在调试中,包含的行emit()
已被执行)但是 Activity 中的观察者永远不会被激活。知道为什么吗?
提前致谢
android - 我什么时候应该在 Fragment 生命周期中收集 SharedFlow 事件
我认为可以在 onViewCreated 上收集 SharedFlow 数据。但是当我替换片段 n 次然后向 SharedFlow 触发一些事件时,它会向我发出 n 次事件而不是一个事件。
我已经修复了我如何将代码放在我的 Fragment 上的 onCreate 上。但我还没有找到任何关于此的文档。我是否遗漏了什么,或者我应该继续在 Fragment 的 onCreate 中使用 SharedFlow 集合?
这是我在 ViewModel 的 SharedFlow 定义
android - Android 项目中的 SharedFlow 无法按预期工作
我试图使用 sharedFlow 将事件从 UI 传递到 viewModel 这是我的 viewmodel 类
这就是我发出动作的方式
第一次发射按预期发生,但随后它没有从视图模型发射/收集。
我在这里做错什么了吗?
android - ui中再次收集StateFlow最后一个值
所以最近我一直在使用 StateFlow、SharedFlow 和 Channels API,但我在尝试将我的代码从 LiveData 迁移到表示层中的 StateFlow 时遇到了一个常见的用例。
我面临的问题是,当我发出数据并在 viewModel 中收集它时,我可以将值设置为 mutableStateFlow,当它最终到达片段时,它使用 Toast 显示一些信息性消息,让用户知道是否有错误发生或一切顺利。接下来,有一个按钮可以导航到另一个片段,但是如果我返回到已经有失败意图的结果的上一个屏幕,它会再次显示 Toast。这正是我想要弄清楚的。如果我已经收集了结果并将消息显示给用户,我不想继续这样做。如果我导航到另一个屏幕并返回(当应用程序从后台返回时也会发生这种情况,它会再次收集最后一个值)。LiveData 并没有发生这个问题,我只是做了同样的事情,
代码:
然后在我的片段中:
launchAndRepeatWithViewLifecycle 扩展功能:
关于为什么会发生这种情况以及如何使用 StateFlow 解决它的任何想法?我也尝试使用带有 replay = 0 的 SharedFlow 和带有 receiveAsFlow() 的 Channels,但随后出现了其他问题。
android - LiveData 是热的还是冷的?
我们知道 StateFlow 和 SharedFlow 很热门。
StateFlow 是一个热流——只要该流被收集或当垃圾收集根中存在对它的任何其他引用时,它就会保留在内存中。
SharedFlow 是一个热流,它向从它收集的所有消费者发出值。
流动本身是冷的。
流是类似于序列的冷流......
我有一个找不到直接答案的问题。LiveData 是热的还是冷的?
kotlin - 如何使用 kotlin 协程创建轮询机制?
我正在尝试使用 kotlin 协程创建一个轮询机制,sharedFlow
并希望在没有订阅者时停止并在至少有一个订阅者时激活。我的问题是,sharedFlow
在这种情况下是正确的选择还是应该使用channel
. 我尝试使用channelFlow
,但我不知道如何关闭cancel
块体外部的通道(不是工作)。有人可以帮忙吗?这是片段。