我是靠谱客的博主 如意毛衣,最近开发中收集的这篇文章主要介绍Kotlin开发Android App和Java的差异8----Kotlin中使用协程Flow数据流,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
1 Flow的概念
关于流的概念,在RxJava中就有提及。数据流是可以通过异步的方式来处理一组数据,而不仅仅是单个数据的处理,而且不会阻塞主线程
2 Flow的创建和使用
Kotlin中,Flow的创建是通过flow来完成,Repository相当于是一个创造者,通过emit注射发送给消费者(UI)
Repository
suspend fun getCurrentAlarm(): Flow<Alarm> {
return flow {
var alarm = iWeatherDataSource.getCurrentWeather()
emit(alarm)
}
}
Flow的使用是需要在协程中使用
fun getCurrentWeather() : MutableLiveData<Alarm>{
val result:MutableLiveData<Alarm> = MutableLiveData<Alarm>()
//在协程中使用flow
viewModelScope.launch {
repository.getCurrentAlarm().collect {
result.postValue(it)
}
}
return result
}
3 StateFlow和SharedFlow
3.1 StateFlow
StateFlow和LiveData一样,都能够实时感知数据的变化,StateFlow也是流中的一种体现,监听数据需要在协程中使用
fun getCurrentWeather() : MutableStateFlow<Alarm>{
//1 需要初始化赋值,LiveData不需要
var result:MutableStateFlow<Alarm> = MutableStateFlow(Alarm())
viewModelScope.launch {
repository.getCurrentAlarm().collect {
result.value = it
// result.postValue(it)
}
}
return result
}
在Fragment中,通过lifecycleScope可以创建协程,通过collect来收集变量的数据
lifecycleScope.launch {
newsModel.getCurrentWeather().collect {
tv_show.text = it.reason
}
}
但是StateFlow和LiveData的不同之处在于:
(1)创建StateFlow实例,需要赋初始值,但是LiveData不需要;
(2)当View进入STOPPED的时候,LiveData.observe会自定取消注册使用方;但是StateFlow不会
3.2 SharedFlow
稍后介绍
最后
以上就是如意毛衣为你收集整理的Kotlin开发Android App和Java的差异8----Kotlin中使用协程Flow数据流的全部内容,希望文章能够帮你解决Kotlin开发Android App和Java的差异8----Kotlin中使用协程Flow数据流所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复