为什么我应该使用实时数据而不是 Observable?

Why should I use live data instead of Observable?

我在论坛和 Whosebug 上搜索了很多,但没有找到满意的答案。虽然可观察字段与我的视图模型中的数据绑定配合得很好,但我为什么要改用实时数据对象?

我知道实时数据是生命周期感知的,它只更新 activity/fragment 处于活动状态的 UI,但是使用实时数据而不是 Observable 字段真的更好吗? 因为我正在做一个金融应用程序项目,它确实没有做太多 ui 与 observables 的工作,但它只在收到服务器响应时更新 ui requires a用户互动。

另外当activity被销毁时,fragment的视图模型和它的数据是否还在内存中?如果不是——我想不是——关于内存泄漏,实时数据相对于可观察数据的优势是什么?

why should I use a Live Data object instead?

您不必使用 LiveData。这是一个选项,仅此而已。

I know that Live Data is lifecycle aware and it only updates the UI in activity/fragment's active state, but is it really much better to use Live Data instead of Observable fields?

您将不得不以某种方式处理生命周期。如果你更喜欢手动处理你的 Rx 订阅,或者如果你想为此使用一个库,欢迎你这样做。有些人更喜欢使用 LiveDataReactiveStreams 或类似机制将他们的 Rx 类型包装在 LiveData 中,因此他们将根据 activity/fragment 生命周期自动清理。

此外,并不是每个人都使用 RxJava。 RxJava 的学习曲线很长,一些开发人员更愿意跳过它。对他们来说,直接使用LiveData就可以了。

Also when the activity is destroyed, do fragment's view model and its data still stay in memory?

这取决于您的实施。

例如,假设 "fragment's view model" 表示您正在使用 Jetpack ViewModel 系统。在那种情况下:

  • 如果 activity 作为配置更改的一部分被销毁,所有 ViewModel 作用域为 activity 的对象及其片段将保留在配置更改

  • 如果 activity 被销毁是因为它真的完成了,所有 ViewModel 作用域为 activity 的对象及其片段将在activity 本身就是垃圾收集器

what is the advantage of live data over observables about memory leak?

同样,在某些时候,您需要 dispose() 您的 RxJava Disposable 对象。无论您是自己这样做、使用库还是依赖 LiveData 包装器,都取决于您。