3

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

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

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

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

val player: LiveData<Player> = ...

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

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

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

4

1 回答 1

3

假设Observer是 Android UI 的一部分,它是ActivityFragment并且LiveDataViewModel,

  • 进行转换Observer将是本地的Observer,如果 Activity 由于任何Config更改而重新启动,Activity除非您以某种方式保存它,否则您的内部数据将被销毁,但LiveData会持续进行活动重新创建,因此如果您在观察者端进行转换,则必须这样做每次,但在 的情况下LiveData,转换后的数据将被缓存,并在您每次调用时提供。
  • 第二件事是 UI 应该尽可能的愚蠢,在数据到达 UI 之前进行所有的数据转换。这样您就可以使用单元测试来测试您的转换,而无需真正依赖 UI。
于 2021-02-08T07:37:46.123 回答