我在论坛和stackoverflow上进行了大量搜索,但找不到满意的答案。虽然可观察字段非常适合在视图模型中进行数据绑定,但是为什么我应该改用Live Data对象呢?
我知道实时数据是生命周期感知的,它仅在活动/片段的活动状态下更新UI,但是使用实时数据代替可观察字段真的更好吗? 因为我正在从事一个财务应用程序项目,并且它实际上并没有对可观察对象进行太多的ui工作,但是它仅在收到需要用户交互的服务器响应时才更新ui。
当活动被销毁时,片段的视图模型及其数据是否仍保留在内存中?如果不是-我想不是-与观察到的有关内存泄漏的实时数据相比,实时数据有什么优势?
答案 0 :(得分:4)
为什么我应该改用Live Data对象?
您不必使用LiveData
。这是一个选择,仅此而已。
我知道实时数据是生命周期感知的,它仅在活动/片段的活动状态下更新UI,但是使用实时数据代替可观察字段真的更好吗?
您将不得不以某种方式处理生命周期。如果您希望手动处理Rx订阅,或者想要为此使用库,欢迎这样做。有些人更喜欢使用LiveData
或类似机制将其Rx类型包装在LiveDataReactiveStreams
中,因此他们将根据活动/片段生命周期自动清除。
此外,并非所有人都使用RxJava。 RxJava的学习曲线很大,有些开发人员希望跳过它。对于他们来说,直接使用LiveData
可能会有用。
当活动被销毁时,片段的视图模型及其数据是否仍保留在内存中?
这取决于您的实现。
例如,假设通过“片段的视图模型”,您的意思是您正在使用Jetpack ViewModel
系统。在这种情况下:
如果将活动作为配置更改的一部分销毁,则所有ViewModel
对象的范围仅限于该活动,并且其片段将在配置更改中保留
如果由于活动已真正结束而将其销毁,则所有ViewModel
对象的范围仅限于该活动,并且在收集活动本身时将对其片段进行垃圾收集
与可观察的内存泄漏相比,实时数据有什么优势?
同样,在某些时候,您需要dispose()
您的RxJava Disposable
对象。无论您自己进行操作,使用库还是依靠LiveData
包装器,都取决于您自己。