7

正如我在标题中提到的,我很好奇两者之间的一般差异。你能帮忙吗?我找不到具体的区别,因为互联网上有复杂的例子。

  1. 在性能方面有什么区别?
  2. 在哪些场景下有优势?
  3. 将 StateFlow 与 Kotlin Flow 结合使用是有利的。但是在使用 LiveData 的项目中不切换到 StateFlow 的风险是什么?
  4. Google 是否会弃用 LiveData?:)
4

1 回答 1

4

我刚刚切换到StateFlow,所以这是我回答您问题的好时机。


在性能方面有什么区别?

老实说,我不知道,但由于它是由KotlinAndroid推动的,所以相信他们 :)。


在哪些场景下有优势?

  1. 因为LiveData您不必强制给出初始值,它可能最终会在init{};中编写更多代码。但是对于StateFlow被迫提供初始值(包括null),它可能会节省您的代码。

  2. 因为LiveData即使你给了一个初始值, 当你访问它时你仍然需要做Null Checkvalue(见这个),这有点烦人。但这不会发生StateFlow——它应该是这样的。

  3. 因为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?

我会说是,他们会说不,不,因为“还没有大声说出来”:)。

于 2021-08-13T16:20:37.627 回答