我遇到过建议切换到 StateFlow 的文章。喜欢这里的那个。同样在新的 Android 工作室中,StateFlow 支持自动包含在数据绑定的功能中,包括协程依赖项。大多数应用程序已经在使用实时数据。我们应该从 LiveData 迁移到 StateFlow 吗?有什么好处?
3 回答
状态流和实时数据之间没有太大区别。主要区别在于状态流需要一个初始值,因此不需要检查可空性。第二个区别在于取消注册消费者;当视图进入 STOPPED 状态而状态流没有时,实时数据会自动执行此操作。要实现与实时数据类似的行为,您可以在一个Lifecycle.repeatOnLifecycle
块中收集流。
状态流的好处
- 状态流包含在协程库中,可用于多平台项目
- 在您的项目中使用一个 API(Flow),而不是两个(LiveData 和 Flow)。
- 是 Kotlin,为什么不呢
流是最佳实践
Livedata 用于观察数据,而无需处理生命周期问题。而 Kotlin 流用于持续数据集成,它还简化了异步编程。
以房间图书馆为例。首先,它使用 livedata 将数据从数据库传输到 UI。它解决了大部分现有的问题。但是当数据库将来有任何变化时,livedata 在这种情况下就束手无策了。
过了一会儿,房间里用 Kotlin flow 解决了这个问题。使用 Flow 作为返回类型,room 为数据库和 UI 之间的应用程序之间的无缝数据集成创造了一种新的可能性,而无需编写任何额外的代码
在媒体网站上阅读这篇文章
这取决于你想要什么,
如果您想要对应用程序进行手动、全面和多功能的控制,请选择状态流
如果您想要为您的应用程序提供部分自动或相对易于使用的方法,我会说 - 坚持使用实时数据
如果您想了解我的个人意见,那就是状态流,因为我更喜欢控制而不是易于使用。我不介意为它多写几行,因为它有时对我有用。
可以把它想象成使用苏打水开瓶器和使用指甲刀我可以同时使用这两种方法,但是在这种情况下苏打水开瓶器很容易使用,但是没有像指甲刀那样的多功能性。
归根结底,我每次都使用状态流,因为我懒得为某些项目学习实时数据,因为状态流可以做实时数据可以做的事情,即使实时数据会容易得多。
你应该决定你想选择什么,如果你不像我那么懒惰,我建议两者都用,每次都使用合适的那个。
干杯。