作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道如何将项目发送/发送到 Kotlin.Flow
,所以我的用例是:
在消费者/ViewModel/Presenter 中,我可以使用 collect
订阅功能:
fun observe() {
coroutineScope.launch {
// 1. Send event
reopsitory.observe().collect {
println(it)
}
}
}
Repository
另一方面,对于 RxJava,我们可以使用
Behaviorsubject将其公开为
Observable/Flowable
并发出这样的新项目:
behaviourSubject.onNext(true)
flow {
}
最佳答案
如果您想获得订阅/收藏的最新值,您应该使用 ConflatedBroadcastChannel :
private val channel = ConflatedBroadcastChannel<Boolean>()
BehaviourSubject
,将 channel 公开为流:
// Repository
fun observe() {
return channel.asFlow()
}
Flow
发送事件/值简单发送到这个 channel 。
// Repository
fun someLogicalOp() {
channel.send(false) // This gets sent to the ViewModel/Presenter and printed.
}
false
BroadcastChannel
反而。
PublishedSubject
private val channel = BroadcastChannel<Boolean>(1)
fun broadcastChannelTest() {
// 1. Send event
channel.send(true)
// 2. Start collecting
channel
.asFlow()
.collect {
println(it)
}
// 3. Send another event
channel.send(false)
}
false
false
在发送第一个事件时打印
之前
collect { }
.
BehaviourSubject
private val confChannel = ConflatedBroadcastChannel<Boolean>()
fun conflatedBroadcastChannelTest() {
// 1. Send event
confChannel.send(true)
// 2. Start collecting
confChannel
.asFlow()
.collect {
println(it)
}
// 3. Send another event
confChannel.send(false)
}
true
false
DataFlow
上提一下 Kotlin 的团队开发。 (名称待定):
关于android - 如何将项目发送到 Kotlin.Flow(如 Behaviorsubject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57345311/
我是一名优秀的程序员,十分优秀!