LiveData 转换地图功能

nas*_*bov 4 kotlin android-livedata mutablelivedata mediatorlivedata android-livedata-transformations

最近我一直在学习 LiveData 上的转换方法

我知道我们可以使用maporswitchMap方法来转换实时数据。假设我们有类似下面的 Player 数据类

data class Player(val name: String, val score: Int = 0)
Run Code Online (Sandbox Code Playgroud)

我们使用map方法将player livedata转换为playerName livedata

val player: LiveData<Player> = ...

val playerName: LiveData<String> = 
    Transformations.map(player) { it.name }
Run Code Online (Sandbox Code Playgroud)

我的问题是,在观察者函数中执行它有什么区别,因为它们都在主线程中运行?我的意思是,如果我们想获取playerName,那么我们也可以在观察者函数中获取它。为什么我们声明第二个 LiveData 实例来获取它

我从本指南中获取了示例代码:https://proandroiddev.com/livedata-transformations-4f120ac046fc

raj*_* ks 6

假设Observer是 Android UI 的一部分,是ActivityFragmentLiveData一部分ViewModel

  • 进行转换Observer将是本地的Observer,如果 Activity 由于任何Config更改而重新启动,则内部数据Activity将被破坏,除非您以某种方式保存它,但会LiveData持续活动重新创建,因此如果您在观察者端进行转换,则必须执行此操作每次 ,但在 的情况下LiveData,转换后的数据将被缓存,并在每次调用时提供。
  • 第二件事是 UI 应该尽可能简单,在数据到达 UI 之前进行所有数据转换。这样您就可以使用单元测试来测试您的转换,而实际上不需要依赖 UI。