首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin 学习笔记(六)—— Flow 数据流学习实践指北(二)StateFlow 与 SharedFlow

很可能引发下一场的技术革命,因为大家都懂的原因现在还不能在中国大陆使用,不过国内的度厂正在积极跟进了,预计3月份能面世,且期待一下吧~ 上节(Kotlin 学习笔记(五)—— Flow 数据流学习实践指北...消费者和生产者是一一的关系。...所以,在使用默认构造的 SharedFlow 时,不能使用 tryEmit 发送值,否则无法发送。 一般使用 emit 即可。.../22030171-reactive-streams-on-kotlin-sharedflow-and-stateflow Kotlin中 Flow、SharedFlow与StateFlow区别;五问;...图解 Kotlin SharedFlow 缓存系统;fundroid;https://juejin.cn/post/7156408785886511111 Kotlin:深入理解StateFlow与SharedFlow

1.1K50
您找到你想要的搜索结果了吗?
是的
没有找到

了解 Kotlin Flow(一)

关于 Flow 的知识点有如下一些: Flow 的基本使用 StateFlow 和 SharedFlow 的使用和基本原理 StateFlow、SharedFlow 在 Android 中使用的时候和...LiveData 的比较 基础使用 Kotlin 里 Flow 的基本用法是使用一个 flow 方法创建 Flow 对象: flow {} 需要更新值的时候,在代码块内使用 emit 方法发射值。...StateFlow 顾名思义,StateFlow 就是维护状态的 Flow, 它的使用非常类似 LiveData: val state = MutableStateFlow(0)//必须要初始值...SharedFlow SharedFlow 的使用类似 StateFlow: val stream = MutableSharedFlow() // 更新 scope.launch { stream.emit...这类逻辑如果使用 LiveData 或者 StateFlow,当页面重建后,之前的值都会被监听到,反复弹 Toast,这是一件非常麻烦的事情, 如果使用 SharedFlow ,则不会遇到。

96310

Kotlin中的StateFlow和SharedFlow有什么区别?

欢迎点击上方"AntDream"关注我,每天进步一点点 在Kotlin的协程库kotlinx.coroutines中,StateFlow和SharedFlow是两种用于处理事件流的API,它们有相似之处...这次我们就StateFlow和SharedFlow进行深入对比: StateFlow 和 SharedFlow 概述 StateFlow: 一种用于持有单一最新状态值并发射给多个观察者的热流。...也就是一多的关系,可以有多个collector 同时又具有flow的所有特点,比如可以挂起,切换线程 和上面的StateFlow不同的是,这个不能主动通知collect方,需要不断emit元素,也就是利用了...使用对比 StateFlow 使用示例 val _stateFlow = MutableStateFlow(0) // Initial state val stateFlow: StateFlow...") } // Emit new state _stateFlow.value = 1 SharedFlow 使用示例 val _sharedFlow = MutableSharedFlow<Int

9710

有小伙伴说看不懂 LiveData、Flow、Channel,跟我走

并且在 Kotlin 协程的加持下,Kotlin Flow 目前是 Google 主推的数据流框架。 1. 为什么要使用 Flow?...冷数据流与热数据流 Kotlin Flow 包含三个实体:数据生产方 - (可选的)中介者 - 数据使用方。数据生产方负责向数据流发射(emit)数据,而数据使用方从数据流中消费数据。...冷流和订阅者是一一的关系,多个订阅者间的数据流是相互独立的,一旦订阅者停止监听或者生产代码结束,数据流就自动关闭。...热流和订阅者是一多的关系,多个订阅者可以共享同一个数据流。当一个订阅者停止监听时,数据流不会自动关闭(除非使用 WhileSubscribed 策略,这个在下文再说)。 ---- 3....flow{} 是 suspend 函数,需要在协程中执行; 发送数据 emit(): emit() 将一个新的值发送到数据流中; 终端操作 collect{}: 触发数据流消费,可以获取数据流中所有的发出值

2.1K10

Kotlin Flow响应式编程,StateFlow和SharedFlow

StateFlow的基本用法 即使你从来没有使用过Flow,但是我相信你一定使用过LiveData。...首先是MainViewModel的改造,代码如下所示: class MainViewModel : ViewModel() { private val _stateFlow = MutableStateFlow...然后,这里通过lifecycleScope启动了一个协程作用域,并开始我们刚才定义的StateFlow进行监听。上述代码中的collect函数相当于LiveData中的observe函数。...另外就是使用前面学习过的写法,clickCountFlow进行collect。 现在运行一下程序,效果如下图所示: 这里需要关注的重点是,当手机发生横竖屏切换时,计数器的数字仍然会保留在屏幕上。...另外就是,SharedFlow无法像StateFlow那样通过给value变量赋值来发送消息,而是只能像传统Flow那样调用emit函数。

37710

Kotlin上的反应式流-SharedFlow和StateFlow

点击上方蓝字关注我,知识会给你力量 在本教程中,你将学习Kotlin中的反应式流,并使用两种类型的流——SharedFlow和StateFlow,构建一个应用程序。...现在,Kotlin提供了自己的反应式流实现,称为Flow。与RxJava一样,Kotlin Flow可以创建数据流并其做出反应。也和RxJava一样,事件流可以来自冷或热发布者。...为什么要使用Kotlin的SharedFlow和StateFlow而不是RxJava?" 虽然RxJava能很好地完成工作,但有些人喜欢把它描述为「用火箭筒来杀死蚂蚁」。...emit(value: T)是你可以在SharedFlow上调用的两个事件生产方法之一。另一个方法是使用tryEmit(value: T)。...你仍然可以在StateFlow使用emit和tryEmit,但是...不要这样,相反,你应该这样做。

2.1K60

Kotlin 学习笔记(七)—— Flow 数据流学习实践指北(三)冷流转热流以及代码实例

人大又要召开了,真心希望这一届的委员们能够提一些靠谱的提案,也不枉我上周网购的商品这周还没到北京了··· 前一节(Kotlin 学习笔记(六)—— Flow 数据流学习实践指北(二)StateFlow...而冷流的生产者与消费者是一一的关系,且没有 replay 缓存机制,为新的消费者再创建一个冷流开销较大,这种情况下将冷流转为热流就显得事半功倍了。...如果不做任何处理,用户键入的字符串做的任何修改,都会去请求一次接口,那后端服务器肯定是吃不消的;对于用户而言,在不断输入的过程中返回的结果用户并不会很关心,他只会关心最终输入完成之后请求的数据。...参考文献 StateFlow 和 SharedFlow 官方文档 https://developer.android.google.cn/kotlin/flow/stateflow-and-sharedflow...Kotlin协程:冷流转换热流的使用与原理;LeeDuo;https://blog.csdn.net/LeeDuoZuiShuai/article/details/127145092

1.2K40

谁能取代Android的LiveData- StateFlow or SharedFlow?

Kotlin Coroutines最近引入了两种Flow类型,即SharedFlow和StateFlow,Android的社区开始思考用这些新类型中的一种或两种来替代LiveData的可能性和意义。...关于术语的注意:就像我们LiveData使用观察者这个术语,冷流使用收集者这个术语一样,我们SharedFlow使用订阅者这个术语。...如果我们真的需要像使用LiveData那样用.value访问Flow的状态,我们可以使用StateFlow,它是一个专门的、受限的SharedFlow。...StateFlow时,使用SharedFlow,比如额外的缓冲,重放更多的值,或者省略初始值。...StateFlowSharedFlow的约束可能不是最适合你的,你可能想用行为来调整并选择使用SharedFlow。

1.4K20

实战 | 使用 Kotlin Flow 构建数据流 管道

△ 单向数据绑定 使用 Flow 可以想象对于这些组合和转换来说,我们需要一个成熟的工具来完成这些操作。在本文中我们将使用 Kotlin Flow 来实现。...在示例代码中,我们首先从 API 获取消息,然后使用 emit 挂起函数将结果添加到 Flow 中,这将挂起协程直到收集器接收到数据项,最后我们将协程挂起一段时间。...val result: Flow> = flow { emit(repository.fetchItem()) } 您可以使用 StateFlow 的可变版本,并随时根据需要在协程中更新它的值...△ 设置超时时间来应对不同的场景 总的来说,建议您使用 StateFlow 来通过 ViewModel 暴露数据流,或者使用 asLiveData 来实现同样的目的,关于 StateFlow 或其父类...Kotlin Flow 构建您的基础设施。

1.4K10

解决Android开发中的痛点问题用Kotlin Flow

前言 本文旨在通过实际业务场景阐述如何使用Kotlin Flow解决Android开发中的痛点问题,进而研究如何优雅地使用Flow以及纠正部分典型的使用误区。...LiveData的粘性机制会带来副作用,但这本身并不是LiveData的设计缺陷,而是它的过度使用Kotlin Flow是基于kotlin协程的一套异步数据流框架,可以用于异步返回多个值。...kotlin 1.4.0正式版发布时推出了StateFlow和SharedFlow,两者拥有Channel的很多特性,可以看作是将Flow推向台前,将Channel雪藏幕后的一手重要操作。...考虑使用kotlin协程中的Channel替代。...当然,适合使用SharedFlow/StateFlow的场景也有很多,下文还会重点研究。

3.2K20

大揭秘,Android Flow面试官最爱问的7个问题

问题:请详细说明在使用Flow时,如何实现异步任务设置超时操作,以避免长时间等待。 出发点: 这个问题涉及到面试者对于超时操作的理解,以及如何处理超时操作。...StateFlow与SharedFlow 问题: StateFlow和SharedFlow有哪些区别?在什么场景下应该选择使用StateFlow而不是SharedFlow,反之亦然?...如果只关心最新状态,使用StateFlow更为合适;如果需要获取历史元素,或者存在多个订阅者,就可以选择使用SharedFlow。 问题: StateFlow在多线程环境中如何确保线程安全性?...参考简答: StateFlow本身并没有对线程的调度进行限制,因此在多线程环境中,需要在合适的协程上下文中使用StateFlow。通常建议在主线程上更新StateFlow,以确保UI的线程安全性。...在不同协程中更新StateFlow可能会导致竞态条件,因此需要确保在更新StateFlow使用适当的同步机制,例如Mutex。

20521
领券