LiveData 转换映射功能

LiveData transformations map functionality

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

我知道我们可以使用mapswitchMap方法来转换livedata。 假设我们有玩家数据 class 类似于下面

data class Player(val name: String, val score: Int = 0)

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

val player: LiveData<Player> = ...

val playerName: LiveData<String> = 
    Transformations.map(player) { it.name }

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

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

假设 Observer 是 Android 的一部分 UI 即 ActivityFragment 并且 LiveData 是 [=14= 的一部分],

  • Observer 中进行转换将在 Observer 中进行,如果 Activity 由于任何 Config 更改而重新启动,您的数据在 Activity 将被销毁,除非你以某种方式保存它,但 LiveData 坚持 activity 娱乐,所以如果你在 Observer 端进行转换,它必须每次都这样做,但在 LiveData 的情况下,转换后的数据将被缓存并在您每次调用时提供。
  • 第二件事是 UI 应该尽可能愚蠢,在数据到达 UI 之前进行所有数据转换。这样您就可以使用单元测试来测试您的转换,而无需实际依赖 UI.