StateFlow和SharedFlow是发出状态更新并向多个使用方发出值并且可以通过value属性获取当前最新值。类似于观察数据,数据更新,使用方接受最新数据是不是和LiveData很像。确实像,但他比LiveData更强大~~ StateFlow 线程切换:相比于LiveData更新数据的操作只能在主线程进行,但是Flow可以通过flowOn来在不同的Dispatchers(线程分发...
LiveData提供了 mutable(MutableLiveData) 和 immutable(LiveData) 两个类,前者「可读可写」,后者「仅可读」。通过权限的细化,让使用者各取所需,避免由于权限泛滥导致的数据异常。 classSharedViewModel:ViewModel() {privateval_user : MutableLiveData<User> = MutableLiveData()valuser : LiveData<User> = _userfun...
MutableSharedFlow没有起始值 SharedFlow可以保留历史数据 MutableSharedFlow发射值需要调用emit()/tryEmit()方法,没有setValue()方法 与MutableStateFlow不同,MutableSharedFlow构造器中是不能传入默认值的,这意味着MutableSharedFlow没有默认值。 val mySharedFlow = MutableSharedFlow<Int>() val myStateFlow = MutableStat...
Kotlin Coroutines最近引入了两种Flow类型,即SharedFlow和StateFlow,Android的社区开始思考用这些新类型中的一种或两种来替代LiveData的可能性和意义。这方面的两个主要原因是: LiveData与UI紧密相连 LiveData与Android平台紧密相连 我们可以从这两个事实中得出结论,从Clean Architecture的角度来看,虽然LiveData在表现层中运行...
SharedFlow、StateFlow与LiveData的区别 StateFlow就是SharedFlow的一种特殊类型,特点有三: 它的replay容量为 1;即可缓存最近的一次粘性事件,如果想避免粘性事件问题,使用SharedFlow,replay默认值0。 初始化时必须给它设置一个初始值 每次发送数据都会与上次缓存的数据作比较,只有不一样才会发送。它还可直接访问它自己的...
StateFlow 是 Flow 的实现,是一个特殊的流,默认的 Flow 是冷流,而StateFlow 是热流,和 LiveData 比较类似。关于冷热流后面一期 SharedFlow 会详细说明。 使用StateFlow 替代 LiveData 应该是目前很多开发者的呼吁了,确实 LiveData 的功能 StateFlow 都能实现,可以说是 LiveData 的升级版。
与LiveData的不同点 StateFlow必须在构建的时候传入初始值,LiveData不需要; StateFlow默认是防抖的,即相同值不更新,LiveData默认不防抖; StateFlow默认没有和生命周期绑定 简单示例 为了帮助大家更好地理解,以下是使用SharedFlow和StateFlow的简单示例: // SharedFlow 示例val sharedFlow=MutableSharedFlow<String>()// 订...
* StateFlow 和 SharedFlow 简单使用 * */classLoginViewModel:ViewModel(){// https://blog.csdn.net/fly_with_24/article/details/120300290// 使用 StateFlow (即UiState)的时候 ,有与 LiveData 一样的「粘性事件」问题// 在弹出 Snackbar 之后旋转屏幕后, 会再次弹出 Snackbar// 使用 SharedFlow 不会有「...
一篇掌握LiveData transformations 公众号 作者:Android群英传 时间:2022-01-10 00:00 谁能取代Android的LiveData- StateFlow or SharedFlow? 公众号 公众号 作者:Android群英传 时间:2021-12-29 00:00 响应式架构更佳实践——MVI 公众号 作者:Android群英传 时间:2021-12-22 00:00 首页...
StateFlow vs SharedFlow 共性: StateFlow和SharedFlow永远都不会停止. 不能指望它们的onCompletionCallback. 不同点: StateFlow可以通过value属性读到最新的值, 但SharedFlow却不行. StateFlow是conflated: 如果新的值和旧的值一样, 不会传播. SharedFlow需要合理设置buffer和replay策略. ...