正如我在标题中提到的,我很好奇两者之间的一般差异。你能帮忙吗?我找不到具体的区别,因为互联网上有复杂的例子。
- 在性能方面有什么区别?
- 在哪些场景下有优势?
- 将 StateFlow 与 Kotlin Flow 结合使用是有利的。但是在使用 LiveData 的项目中不切换到 StateFlow 的风险是什么?
- Google 是否会弃用 LiveData?:)
正如我在标题中提到的,我很好奇两者之间的一般差异。你能帮忙吗?我找不到具体的区别,因为互联网上有复杂的例子。
我刚刚切换到StateFlow
,所以这是我回答您问题的好时机。
在性能方面有什么区别?
老实说,我不知道,但由于它是由Kotlin和Android推动的,所以相信他们 :)。
在哪些场景下有优势?
因为LiveData
您不必强制给出初始值,它可能最终会在init{}
;中编写更多代码。但是对于StateFlow
您被迫提供初始值(包括null
),它可能会节省您的代码。
因为LiveData
即使你给了一个初始值, 当你访问它时你仍然需要做Null Checkvalue
(见这个),这有点烦人。但这不会发生StateFlow
——它应该是这样的。
因为LiveData
您不能轻易或优雅地观察内部的数据变化,您ViewModel
可以使用这里observeForever()
也提到的。但为了简单起见,请执行以下操作:StateFlow
class FirstViewModel() : ViewModel() {
val uiScope = viewModelScope
val name = MutableStateFlow("Sam") //must have initial value
//val name = MutableStateFlow<String?>(null) //null is acceptable
init {
observeName()
}
private fun observeName() = uiScope.launch { //must run in coroutine scope
name.collect { name -> //for Fragment / Activity, use lifecycleScope.launch{}
//do your stuff
}
}
}
将 StateFlow 与 Kotlin Flow 结合使用是有利的。但是在使用 LiveData 的项目中不切换到 StateFlow 的风险是什么?
在使用Java的项目中不切换到Kotlin的风险是什么?:)
Google 是否会弃用 LiveData?
我会说是,他们会说不,不,因为“还没有大声说出来”:)。