这是我参与更文应战的第19天,活动详情查看: 更文应战

重视我的大众号 “安安安安卓” 学习更多知识

StateFlow和Livedata

两者异同

假如你仔细去了解的话会发现StateFlow和Livedata有很多相似之处。两者都是用来观察数据的,非常适宜用来做照应式开发。

不过两者也有不同之处的:

  • Stateandroid/yunosFlow结构中android手机有默认值,Livedata没有
  • Livedata只要生命周期处于started或resumed情况的时分才华收到线程和进程的差异是什么数据更新,而StateFandroid下载low即便退到后台也能够收到数据。

冷流暖流

冷流:顾客调用搜集collect办法的时分生产者才会开始发射数据,如下代码示例便是冷流。

 (2.android下载装置.9).asFlow().collect{
println(it)
}

暖流:本文中StateFlow便是暖流,即便不调用collect办法生产者也会发射数据。

Livedata运用

关于Livedata能够查看我前android下载装置些天的文章

/post/线程池创立的四种697568…

/poandroidstudio装置教程st/697831…

StateFlow运用

运用StateFlow结束数据监听

StateFlow能够通过setValue来更改数据情况

下面简略介绍一下用法:

  1. 增加activity和lifecycle扩展库
implementation 'androidstudio装置教程android线程和进程的差异是什么x.activity:activity-ktx:1.2.2'
impl线程的概念ementation "androidx.lifecycle:lifecycle-livedataandroid的drawable类-ktx:2.2.0"
  1. viewmodel中增加StateFlow代码android下载装置
 private val mutableStateFlow = MutableStateFlow("安安安安卓")//结构中需求有初始值
val stateFlow: StateFlow<String&gtandroid平板电脑价格; = mutableStateFlow//这儿为什android下载么要赋值给stateFlow呢,因为stateFlow是不能对value进行赋值的,MutableStateFlow是能够的,这样做能够避免用户在activit线程池创立的四种y中有更新数据的行为
fun changeData(data: String) {
mutableStateFlow.value = data//发送数据
}
  1. activity中的数据监听处理

当咱们点击按钮的时分调用线程池vie线程是什么意思wModel的changeData办法,更新flow的数据。

  btnSendD线程池创立的四种ata.setOnClickListener {android下载
viewMandroid是什么手机牌子odel.chaandroid平板电脑价格ngeData("大众号:安安安安卓")
}
lifecycleScope.launch {//这儿线程的几种状况是运行在主线程的,所以下面的代码能够进行更新ui
viewModel.stateFlow.collect {
tvShowData.textandroid是什么手机牌子 = it
}
}
  1. 结束作用

Livedata用的爽吗?StateFlow让你更爽

本例结束了下面的作用,初次进入页面StateFlow发送默认值:”安安安安卓”,点击按钮后调用ViewMandroid是什么手机牌子odel的c线程是什么意思hangeData办法更新数据,在TextView中展现。

这儿的运用与Livedataandroid/yunos根本一同,不过下一个比如你就会发现StateFlo线程w的模板代码更少,更简练

运用StateFlow结束MediatorLiveData的作用

关于MediatorLiveDa线程池的七个参数ta你能够看我这篇文章:

/post/697568…

那么相同的作用运用StateFloandroid/yunosw改怎么结束呢,下面上代码:

上StateFlow结束的代码:

  1. ViewModel中代码声明
class StateFlowMediatorViewModel : ViewModel() {
private var count线程的几种状况1 = 0//第一个按钮点击的线程撕裂者次数
p线程安全rivate var count2 = 0//第二个按钮点击的次数
private线程安全 val flow1 = MutableStateFlow(0)
private val flow2 = MutableStateFlow(0)
va线程池创立的四种l flow = flow1.combine(flow2) { data1, data2线程数 ->
data1 + data2//将两个flow交融,别离点击的数量相加
}
fun flow1pp() {
flow1.value = ++count1//点击第一个按android下载钮数量加1
}
fun flow2pp() {
flow2.value = ++count2//点击第二个按钮数量加1
}
}
  1. a线程池创立的四种ctivity中代码声明
 findViewById<Button>(R.id线程安全.btn_mediator1android的drawable类).setOnClickListener {
model.flow1pp()
}
findViewById<Button>(R.id.btn_mediator2).setOnCliAndroidckListener {
model.flow2androidstudio装置教程pp()
}
lifecycleScope.launch {
model.flow.collec线程的几种状况t {
textView?.text = if (it > 10) "亲爱的安安安安卓同学您现已点击了$it 次了,再点也不和你玩了" else "您现已点android系统击了$it 次"
}
}
  1. 结束作用

Livedata用的爽吗?StateFlow让你更爽

这儿只运用了很少量的代码就结束了上一篇Livadata中的demo作用,所以StateFlow真的很好,而且android什么意思它的好必定不止这些的,需求进一步开掘

重视我的大众号 “安安安安卓”线程是什么意思习更多知识