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

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

Rouse 读完需要 10 分钟 速读仅需 4 分钟 在Android应用开发中,数据流是一个至关重要的概念。...而在Jetpack库中,SharedFlow 和 StateFlow 是两个处理数据流的利器,它们基于协程,提供了一种响应式的编程方式。本文将深入探讨这两个类的原理,以及在实际开发中的使用技巧。...: NULL) 构造函数中的 value 参数表示 MutableStateFlow 的初始状态值。在创建 MutableStateFlow 时,需要提供这个初始状态值。...与LiveData的不同点 StateFlow必须在构建的时候传入初始值,LiveData不需要; StateFlow默认是防抖的,即相同值不更新,LiveData默认不防抖; StateFlow默认没有和生命周期绑定...假设我们需要在应用中管理全局的主题模式,我们可以使用 StateFlow。

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

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

    不管较老的数据是否被消费,当 Buffer 已满而又有新的数据到达时,老数据都会从 Buffer 中移除,腾出空间让给新数据。...来说 StateFlow 默认没有和生命周期绑定,直接使用会有问题; StateFlow 默认防抖:即如果发送的值与上次相同,则生产者并不会真正发送。...与 LiveData 相比,没有和 Activity 的生命周期绑定恐怕是使用 StateFlow 最不方便的地方了。...而如果使用的是 StateFlow 或其他数据流,在 View 进入 STOPPED 状态时,收集数据的操作并不会自动停止。...; 4)StateFlow 是 SharedFlow 的一个子类,replay = 1,必须给定初始值,自带防抖; 5)使用 StateFlow 或 SharedFlow 收集值时,记得在 repeatOnLifecycle

    1.5K50

    安卓基础干货(三):安卓数据库的学习

    ---- title: 安卓基础干货(三):安卓数据库的学习 copyright: true categories: 安卓基础干货 date: 2018-01-10 19:35:26 tags: [Android...BLOB(二进制对象)数据类型,也接受varchar(n)、char(n)、decimal(p,s) 等数据类型, SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么...例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。...在android应用程序中创建按数据库的步骤: 1、写一个DBHelper,继承了SQLiteOpenHelper,重新写了父类的构造方法、onCreate、onUpGrade: //创建数据库 DBHelper...使用ArrayAdapter为listview填充数据的步骤: 1、在布局文件中添加ListView 2、在代码中初始化这个listview控件 3、调用listview.setAdapter()填充数据

    2.8K20

    浅谈安卓中的MVP模式

    端午放假,天气下雨,于是乎在家撸一下博客,本篇博客将为大家解析MVP模式在安卓中的应用。 本文将从以下几个方面对MVP模式进行讲解: 1.  MVP简介 2.  为什么使用MVP模式 3.  ...为什么使用MVP模式 在Android开发中,Activity并不是一个标准的MVC模式中的Controller,它的首要职责是加载应用的布局和初始化用户界面,并接受并处理来自用户的操作请求,进而作出响应...另外,回想一下你在开发Android应用时是如何对代码逻辑进行单元测试的?是否每次都要将应用部署到Android模拟器或真机上,然后通过模拟用户操作进行测试?...= null){ listener.complete(users); } } } 加载完数据,回调listener中的complete方法。...中的complete方法,数据就显示在界面上了。

    98030

    Flow简介

    看起来和Rxjava很像,但是又简单很多吧 flow的冷流与热流 冷流 上面的简单使用即是冷流,即执行是惰性的,调用末端流操作符(collect 是其中之一)之前, flow{ ... } 中的代码不会执行...,因为在订阅之前已经被消费了,所以收不到数据 热流的具体实现SharedFlow和StateFlow,分别对应的实现类MutableSharedFlow和是MutableStateFlow,所以我们要讲的也就是这两个类...2.MutableStateFlow MutableStateFlow 就是reply为1的MutableSharedFlow,同时它必须要有一个初始值,此外每次更新数据都会和旧数据做一次比较,只有不同时候才会更新数值...具体demo如下: val stateFlow =MutableStateFlow(value = -1) lifecycleScope.launch { stateFlow.collect...it.toString()) delay(1000) Log.e("collectLatest_end",it.toString()) } 运行结果如下: image.png 可以看到,会结束旧的数据执行即使在执行中

    97510

    安卓基础干货(五):安卓线程与数据上传下载的学习

    使用POST方式提交数据时的中文乱码解决方法(重点) 解决办法:使用客户端和服务器两边的字符集编码保持一致。...UTF-8, 使用GET方式提交数据的中文乱码的解决方法 使用URLEncoder.encode(name,"UTF-8")进行url编码: String path = "http://192.168.22.136...javase实现多线程 步骤: 1、在客户端创建一个与服务器端大小一样的空白文件 2、设置子线程的个数 3、计算每个子线程下载的数据块大小和下载起始位置、结束位置 4、创建子线程开始下载数据 5、得到每个子线程都下载完成的标记...total + len; int currentPosition = startIndex + total; //能够即时的把数据写到数据...TextUtils.isEmpty(path) || TextUtils.isEmpty(threadCountStr)){ Toast.makeText(this, "下载地址或线程个数不能为空

    3K10

    了解 Kotlin Flow(一)

    关于 Flow 的知识点有如下一些: Flow 的基本使用 StateFlow 和 SharedFlow 的使用和基本原理 StateFlow、SharedFlow 在 Android 中使用的时候和...在日常开发中,普通的 Flow API 只能有一个 collect 的地方,并不能满足我们的需求,所以 Kotlin 还提供了更丰富的 APIStateFlow 和 SharedFlow。...StateFlow 顾名思义,StateFlow 就是维护状态的 Flow, 它的使用非常类似 LiveData: val state = MutableStateFlow(0)//必须要初始值...例如数据流依次为 1, 2, 3, 4, 5,replay 是2,那么这时候收集方会收到 4, 5 的值。extraBufferCapacity 为额外的缓冲队列的容量。...onBufferOverrflow 则为背压(collect比emit耗时,emit的数据源太多处理不过来)的情况下的处理策略,包括 SUSPEND 挂起 DROP_OLDEST 把之前的未处理任务丢弃

    1K10

    安卓增加或修改现有app apk的功能(apk功能扩展)

    摘要: 安卓增加或修改apk android apk app的功能(apk功能扩展)标签: smali,反编译apk,apk修改,apk合并,android app 功能扩展 现有apk不能满足需要...因为apk被反编译后,生成的是smali文件,需要懂一些smali基本语法。3、从理论上说,apk被反编译为smali代码后,完全可以通过修改增加smali代码,从而增加或修改apk的功能。...4、合并资源文件;将副apk的窗体使用到的资源文件复制到主apk的资源目录里面;res\layout\目录下的布局文件;res\drawable\使用到的图片;5、合并smali目录;在主msali目录中..."false" android:name="com.example.myapplication.MainActivity"/>添加至主AndroidManifest.xml7、在主smali 启动窗体中适当位置...副apk窗体将影响主apk的运行。从而达到增加或修改已有apk的功能。8、回编译修改后的主smali代码;9、签名回编译后的apk文件;10、运行测试合并后的apk,如果报错,根据错误信息修改。图片

    91420

    在安卓手机或Win电脑上同步iOS上的日历

    说说我的需求:我平时都是我的iPad上添加我日常的日程,但是如果要到电脑或安卓手机上也有同样的日历就比较不方便。...有想过去试一下多平台的日历软件,但都没有iOS上的日历那么强大和直观,但目前网上的安卓日历软件大都不能与iCloud同步,于是我找到一些能用的安卓APP: SOL日历(早已不更新) Sunrise(已经被微软收购...,不更新了) QQ邮箱(可以同步,但安卓桌面插件太简陋) 最后发现了时间积木APP,发现和SOL日历都是一个团队做的,功能相似。...这个密码就是在安卓上要输入的密码了。 更多详情参照:安卓手机如何同步共享苹果日历?...使用icloud同步方法 下载时间积木(TimeBlocks)软件 下载时间积木(TimeBlocks)软件,Google Play有最新版,国内安卓市场有老的,也可以安装后再更新,这里提供一个4.6的版本

    4.3K20

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

    欢迎点击上方"AntDream"关注我,每天进步一点点 在Kotlin的协程库kotlinx.coroutines中,StateFlow和SharedFlow是两种用于处理事件流的API,它们有相似之处...和livedata比较像,有新数据可以通知collect的一方 同时又具有flow的所有特点,比如可以挂起,切换线程 SharedFlow: 一种通用热流,可以发射事件流而不是仅限于持有最新状态。...流中的每个新值都会覆盖之前的值,即只有最新的状态值会被保留。 SharedFlow: 不会持有单一最新状态值(除非配置了重播缓存)。...使用对比 StateFlow 使用示例 val _stateFlow = MutableStateFlow(0) // Initial state val stateFlow: StateFlow...StateFlow value:获取或设置当前的状态值。

    39610

    Angular 中的数据绑定

    )绑定: 绑定组件属性到 HTML 元素属性中,我们使用 [] 符 事件绑定:监听 DOM 事件,并在组件中触发方法,我们使用 () 符 双向绑定:结合 属性绑定 和 事件绑定 来实现数据流的双向绑定,...两种类型的数据绑定 单向数据绑定 从组件(数据)到视图:绑定组件数据到视图上,我们使用插值 Interpolation 和属性 Property 绑定。...方向 Interpolation 绑定:单向绑定,从组件数据 -> 视图。组件属性数据的更改都会反映在视图上。 Property 绑定:也是单向绑定,从组件数据 -> 视图。...组件数据绑定到元素的属性上。对组件属性数据的更改会更改相应的元素属性。 表达式 vs 属性 Interpolation 绑定:它是为单个表达式或者变量而设计的。...事件绑定 事件绑定允许我们将事件(比如按键、点击、悬停、触摸等)绑定到数组中的一个方法。它是从视图到组件的单向绑定。

    21310
    领券