我阅读了许多关于viewmodel和livedata的教程,但我没有在mvvm模式中的viewmodel类中实际使用livingata。提前致谢。
MVVM模式只是向下说V - > VM - > M并反应M - > VM - > V.意味着View可以调用ViewModel上的方法,但是ViewModel没有对View调用方法的引用在它上面(设置数据)。从ViewModel到View的通信方式是通过View观察一些变量(ObservableField,LiveData,RxJava等)。
LiveData是一个很好的可观察对象,用于提供viewModel和View之间的通信,尤其是在诸如旋转之类的状态更改之间。它还提供了模型和视图之间关于数据库更改和Room的良好通信。
根据Google文档,如果您已经在使用像Rx或Agera这样的库,则可以继续使用它们而不是LiveData。但在这种情况下,您有责任处理每个Android组件生命周期的对象分配和解除分配。
使用MVVM模式时,由于viewmodel没有对视图的引用,因此您需要可观察的数据持有者来观察更改,以便您可以正确地更新视图。
在这种情况下,您可以使用livingata,一个体系结构组件或任何其他可观察的,如Rx。
主要的区别是livingata尊重android生命周期,而rx observables则没有。
使用livedata,当onChange被调用时,由于停止活动而没有崩溃,因为它可以识别生命周期。但是没有liveata,你可以自己处理这个案子。