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

Kotlin Flow响应式编程,StateFlow和SharedFlow

大家好,今天是Kotlin Flow响应式编程三部曲的最后一篇。 其实回想一下我写这个Kotlin Flow三部曲的初衷,主要还是因为我自己想学这方面的知识。...内容和前面的两篇文章有一定的承接关系,所以如果你还没有看过前面两篇文章的话,建议先去参考 Kotlin Flow响应式编程,基础知识入门 和 Kotlin Flow响应式编程,操作符函数进阶 。...StateFlow的基本用法 即使你从来没有使用过Flow,但是我相信你一定使用过LiveData。...StateFlow的高级用法 虽说我们使用StateFlow改造的计时器已经可以成功运行了,但是有没有觉得刚才的写法有点太过于传统了,看着非常得不响应式(毕竟用法和LiveData完全一致)。...而LiveData并没有提供非粘性的版本,所以网上甚至还出现了一些用Hook技术来让LiveData变成非粘性的方案。 相比之下,Flow则人性化了很多。想要使用非粘性的StateFlow版本?

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

    TextField的高宽autosize

    大家好,又见面了,我是你们的朋友全栈君。...var t_name:TextField = new TextField; trace(t_name.height); trace(t_name.width); 这样打印出来的高度都是100PX,是系统默认的...如果不设置可能会让父容器宽高变大,遮挡住别的窗口的鼠标事件。 可以简单地使用tf.autoSize=TextFieldAutoSize.LEFT;来解决 这样宽高就会根据文本内容大小来调整了。...如果文本中包括换行符(例如 “\n” 或 “\r”),则会另外调整底边来适合文本的下一行。如果 wordWrap 也设置为 true,则仅调整文本字段的底边,而右边距保持固定。...如果文本中包括换行符(例如 “\n” or “\r”)),则会另外调整底边来适合文本的下一行。如果 wordWrap 也设置为 true,则仅调整文本字段的底边,而左边距保持固定。

    1K10

    写给初学者的Jetpack Compose教程,使用State让界面动起来

    如果你早就已经不再使用LiveData,而是转向使用Kotlin Flow的话,那么你的ViewModel中的代码可能是长这样的: class MainViewModel : ViewModel() {...StateFlow来替代LiveData。...说到StateFlow,它本来和LiveData的用法就极其相似,最大的不同点可能就在于StateFlow是用Kotlin编写的,它可以在初始化的时候就传入一个初始值,从而确保它的值永远不会为空。...TextField(value = "", onValueChange = {}) } } 至于为什么使用这段代码,TextField无法显示输入的内容呢?...提取到了一个TextFieldWidget函数当中,并且在这个函数中使用了状态提升的技巧,通过传入的value参数来指定TextField显示的内容,以及通过onValueChange回调来通知TextField

    1.2K20

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

    Kotlin Flow 是基于 Kotlin 协程基础能力搭建的一套数据流框架,从功能复杂性上看是介于 LiveData 和 RxJava 之间的解决方案。...并且在 Kotlin 协程的加持下,Kotlin Flow 目前是 Google 主推的数据流框架。 1. 为什么要使用 Flow?...LiveData、Kotlin Flow 和 RxJava 三者都属于 可观察的数据容器类,观察者模式是它们相同的基本设计模式,那么相对于其他两者,Kotlin Flow 的优势是什么呢?...冷数据流与热数据流 Kotlin Flow 包含三个实体:数据生产方 - (可选的)中介者 - 数据使用方。数据生产方负责向数据流发射(emit)数据,而数据使用方从数据流中消费数据。...: NULL) 5.3 特殊的 SharedFlow StateFlow 是 SharedFlow 的一种特殊配置,MutableStateFlow(initialValue) 这样一行代码本质上和下面使用

    2.5K10

    从 LiveData 迁移到 Kotlin 数据流

    LiveData 对于 Java 开发者、初学者或是一些简单场景而言仍是可行的解决方案。而对于一些其他的场景,更好的选择是使用 **Kotlin 数据流 (Kotlin Flow)**。...此前一段时间,我们探讨了 如何使用 Kotlin 数据流 来连接您的应用当中除了视图和 View Model 以外的其他部分。...接下来我们一起比较 LiveData 和 Kotlin 数据流中相对应的写法吧: #1: 使用可变数据存储器暴露一次性操作的结果 这是一个经典的操作模式,其中您会使用协程的结果来改变状态容器: △ 将一次性操作的结果暴露给可变的数据容器..._myUiState.value = result } } } 如果要在 Kotlin 数据流中执行相同的操作,我们需要使用 (可变的) StateFlow (状态容器式可观察数据流...通过 stateIn 配置对外暴露的 StateFlow 早前我们使用 stateIn 中间运算符来把普通的流转换成 StateFlow,但转换之后还需要一些配置工作。

    1.4K20

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

    很可能引发下一场的技术革命,因为大家都懂的原因现在还不能在中国大陆使用,不过国内的度厂正在积极跟进了,预计3月份能面世,且期待一下吧~ 上节(Kotlin 学习笔记(五)—— Flow 数据流学习实践指北...来说 StateFlow 默认没有和生命周期绑定,直接使用会有问题; StateFlow 默认防抖:即如果发送的值与上次相同,则生产者并不会真正发送。...与 LiveData 相比,没有和 Activity 的生命周期绑定恐怕是使用 StateFlow 最不方便的地方了。...而如果使用的是 StateFlow 或其他数据流,在 View 进入 STOPPED 状态时,收集数据的操作并不会自动停止。.../22030171-reactive-streams-on-kotlin-sharedflow-and-stateflow Kotlin中 Flow、SharedFlow与StateFlow区别;五问;

    1.5K50

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

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

    3.3K20

    Android数据流的狂欢:Channel与Flow

    为了更好地应对这些需求,Kotlin 协程引入了 Channel 和 Flow,它们提供了强大的工具来处理数据流,实现生产者-消费者模式,以及构建响应式应用程序。...介绍 Channel 和 Flow 是 Kotlin 协程库中的两个关键概念,它们用于处理数据流和异步操作。它们允许您以异步的方式生成、发送、接收和处理数据,而无需担心线程管理或回调地狱。...高级使用技巧 使用 StateFlow StateFlow 是 Flow 的一个特殊变体,用于管理应用状态的数据流。它可以跟踪状态的变化,并将新状态推送给订阅者。...) } // 更新状态 stateFlow.value = 1 使用 Channel 转换 您可以使用 channelFlow 构建器将 Channel 与 Flow 结合,以实现更复杂的数据处理逻辑...结论 Channel 和 Flow 是 Kotlin 协程库中的两个强大工具,用于处理异步数据流和构建响应式应用程序。

    46140

    Kotlin | 使用Kotlin改造Android Gradle

    Gradle5.0+已经支持了Kotlin,但碍于Android Studio目前适配并不是很好,所以并不建议开发使用,至于为什么,在文章末尾也给出了具体原因。 为什么要使用Kotlin改造?...Gradle采用groovy采用开发语言,是一种动态的dsl语言,缺点就是写脚本时如果出现问题,我们无法实时的得知,只能通过print进行得知,而且无法跳转,并且不支持自动补全。...我们先建一个普通的Android项目,然后改造如下,那怎么改造呢?...改造很简单,在你的gradle后面加上kts即可,然后as会自动识别,接着再修改一堆报错,这个过程很麻烦,目前Android Studio支持并不是很好 app的gradle plugins {...,目前Android Studio对Kotlin-Gradle支持的并不是很好,所以如果你新建一个model,就会再次新创建gradle配置文件,这样你就得再次手动配置,很麻烦,所以目前Kotlin-Gradle

    93720

    了解 Kotlin Flow(一)

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

    1K10

    SharedFlow vs StateFlow,一篇看懂选择和使用技巧

    而在Jetpack库中,SharedFlow 和 StateFlow 是两个处理数据流的利器,它们基于协程,提供了一种响应式的编程方式。本文将深入探讨这两个类的原理,以及在实际开发中的使用技巧。...SharedFlow 使用了一种基于事件溯源的机制,当有新的事件产生时,将事件添加到共享的事件序列中,然后通知所有订阅者。...默认值为 0,表示不使用额外的缓冲容量。设置为正整数 m 时,会在内部使用一个带有额外 m 容量的缓冲区。 onBufferOverflow: 表示在缓冲区溢出时的处理策略。...简单示例 为了帮助大家更好地理解,以下是使用 SharedFlow 和 StateFlow 的简单示例: // SharedFlow 示例 val sharedFlow = MutableSharedFlow...假设我们需要在应用中管理全局的主题模式,我们可以使用 StateFlow。

    1.8K10

    kotlin 使用viewStub

    大家好,又见面了,我是你们的朋友全栈君。 ViewStub是一个轻量级的的View,继承于ViewGroup,没有任何尺寸,不绘制任何东西,因此绘制或者移除时更省时。...(ViewStub不可见,大小为0) 优点 实现View的延迟加载,避免资源的浪费,减少渲染时间,在需要的时候才加载View 缺点 ViewStub所要替代的layout文件中不能有标签 ViewStub...在加载完后会被移除,或者说是被加载进来的layout替换掉了 用法 的root view的id是android:inflatedId指定的id panel_import,root view的布局和ViewStub视图的布局保持一致 所以,...text = "我是viewstub里的view" stub_id已经失效,如果再使用这个id,会报nullpointException; 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

    52820

    HarmonyOS实战——TextField文本输入框组件基本使用

    TextField组件基本用法 组件说明: 是Text的子类,用来进行用户输入数据的 常见属性: [在这里插入图片描述] [在这里插入图片描述] TextField ohos:id=...TextField案例——获取文本输入框中的内容并进行Toast提示 通过TextField获取文本输入框中的内容并进行Toast提示 新建项目:TextFieldApplication ability_main...TextField组件高级用法 3.1 密码的密文展示 当输入密码的时候会变成密文展示 [在这里插入图片描述] ohos:text_input_type="pattern_password":表示输入的密码以密文的方式显示...基本使用: <?...有的时候文本输入框并不是一个框,而是下面有一条横线,这条线华为官方叫做 基线 [在这里插入图片描述] 把文本输入框使用横线表示,在上面加上一条基线,把输入框的背景颜色去掉 TextField

    1.5K20
    领券