为什么我应该使用实时数据而不是可观察的数据?

时间:2018-12-21 16:21:10

标签: android rx-java2 android-databinding android-architecture-components android-livedata

我在论坛和stackoverflow上进行了大量搜索,但找不到满意的答案。虽然可观察字段非常适合在视图模型中进行数据绑定,但是为什么我应该改用Live Data对象呢?

我知道实时数据是生命周期感知的,它仅在活动/片段的活动状态下更新UI,但是使用实时数据代替可观察字段真的更好吗? 因为我正在从事一个财务应用程序项目,并且它实际上并没有对可观察对象进行太多的ui工作,但是它仅在收到需要用户交互的服务器响应时才更新ui。

当活动被销毁时,片段的视图模型及其数据是否仍保留在内存中?如果不是-我想不是-与观察到的有关内存泄漏的实时数据相比,实时数据有什么优势?

1 个答案:

答案 0 :(得分:4)

  

为什么我应该改用Live Data对象?

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

  

我知道实时数据是生命周期感知的,它仅在活动/片段的活动状态下更新UI,但是使用实时数据代替可观察字段真的更好吗?

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

此外,并非所有人都使用RxJava。 RxJava的学习曲线很大,有些开发人员希望跳过它。对于他们来说,直接使用LiveData可能会有用。

  

当活动被销毁时,片段的视图模型及其数据是否仍保留在内存中?

这取决于您的实现。

例如,假设通过“片段的视图模型”,您的意思是您正在使用Jetpack ViewModel系统。在这种情况下:

  • 如果将活动作为配置更改的一部分销毁,则所有ViewModel对象的范围仅限于该活动,并且其片段将在配置更改中保留

  • 如果由于活动已真正结束而将其销毁,则所有ViewModel对象的范围仅限于该活动,并且在收集活动本身时将对其片段进行垃圾收集

  

与可观察的内存泄漏相比,实时数据有什么优势?

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

相关问题