这两个之间比较好
1)在Viewmodel中使用协程从网络中获取数据并使用实时数据更新View吗?
2)使用View中的协程调用从网络中获取数据的ViewModel中的暂停函数吗?
另一个问题
我们应该在仅需从后端更新一次UI的用例中使用livedata,例如当用户在该屏幕上时数据不会更改
答案 0 :(得分:7)
我支持(1),将LiveData
用于将数据从ViewModel
移至视图的最后一步。
这是为什么:如果您在用户界面中启动协程,该协程通过ViewModel
...
getData()
之类的挂起电话。无论是Fragment
还是Activity
,该协程只会将结果传递给该特定实例。如果由于配置更改而重新创建了它,则需要在新实例中再次获取。ViewModel
和网络中已经完成的所有工作都会丢失(例如,长时间运行的网络通话的进度),因为在破坏视图后,协程将被取消。相比之下,如果您在ViewModel
中启动协程,然后将结果放在LiveData
中:
onCleared
中)而不是在配置更改时取消协程。LiveData
仅当View存在且处于活动(前景)状态时才会调用观察者,因此您不必担心在View未准备好(或不再存在)。LiveData
并接收已加载的值。或者,如果您的数据仍在加载中,它甚至最终会收到针对先前View实例启动的网络调用的结果。