LiveData 转换映射功能
LiveData transformations map functionality
最近一直在学习LiveData的转换方法
我知道我们可以使用map
或switchMap
方法来转换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 即 Activity
或 Fragment
并且 LiveData
是 [=14= 的一部分],
- 在
Observer
中进行转换将在 Observer
中进行,如果 Activity 由于任何 Config
更改而重新启动,您的数据在 Activity
将被销毁,除非你以某种方式保存它,但 LiveData
坚持 activity 娱乐,所以如果你在 Observer 端进行转换,它必须每次都这样做,但在 LiveData
的情况下,转换后的数据将被缓存并在您每次调用时提供。
- 第二件事是 UI 应该尽可能愚蠢,在数据到达 UI 之前进行所有数据转换。这样您就可以使用单元测试来测试您的转换,而无需实际依赖 UI.
最近一直在学习LiveData的转换方法
我知道我们可以使用map
或switchMap
方法来转换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 即 Activity
或 Fragment
并且 LiveData
是 [=14= 的一部分],
- 在
Observer
中进行转换将在Observer
中进行,如果 Activity 由于任何Config
更改而重新启动,您的数据在Activity
将被销毁,除非你以某种方式保存它,但LiveData
坚持 activity 娱乐,所以如果你在 Observer 端进行转换,它必须每次都这样做,但在LiveData
的情况下,转换后的数据将被缓存并在您每次调用时提供。 - 第二件事是 UI 应该尽可能愚蠢,在数据到达 UI 之前进行所有数据转换。这样您就可以使用单元测试来测试您的转换,而无需实际依赖 UI.