sno*_*lax 17 android kotlin android-livedata kotlin-flow kotlin-stateflow
正如我在标题中提到的,我很好奇两者之间的一般差异。你能帮忙吗?我找不到具体的区别,因为互联网上有复杂的例子。
Sam*_*hen 18
我刚刚切换到StateFlow,所以这是我回答你的问题的好时机。
在性能方面有哪些差异?
老实说,我不知道,但既然它是由Kotlin和Android推动的,就相信它们吧:)。
在哪些场景下有优势?
因为LiveData您不会被迫给出初始值,所以最终可能会在init{};中编写更多代码。但对于StateFlow你被迫给出一个初始值(包括null),它可能会节省你的代码一点。
因为LiveData即使你给出了一个初始值, 当你访问它时你仍然需要做Null Checkvalue(参见this),这有点烦人。但这不会发生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
}
}
}
Run Code Online (Sandbox Code Playgroud)
将 StateFlow 与 Kotlin Flow 结合使用是有利的。但是在使用 LiveData 的项目中不切换到 StateFlow 会有什么风险呢?
在使用Java 的项目中不切换到Kotlin会有什么风险?:)
Google 是否会弃用 LiveData?
我会说是,他们会说不,不,因为“还没有大声说出来”:)。
| 归档时间: |
|
| 查看次数: |
5253 次 |
| 最近记录: |