Sou*_*ldi 4 android kotlin android-livedata kotlinx.coroutines
这两者之间哪个更好
1)在Viewmodel中使用协同程序从网络获取数据并使用实时数据更新View?
2)使用View中的coroutine来调用viewmodel中的suspend函数,该函数从网络中获取数据?
另一个问题
我们是否应该将livingata用于需要从后端仅更新一次UI的用例,就像用户在该屏幕上时数据不会改变一样
我投票给(1),LiveData
用于将数据从ViewModel
视图移动到最后一步.
原因如下:如果您在UI中启动协程,通过您的ViewModel
... 获取数据
getData()
在View中一样暂停调用.无论是一个Fragment
还是一个Activity
,该协程将仅将结果传递给该特定实例.如果由于配置更改而重新创建,则需要在新实例中再次获取.ViewModel
网络中和网络周围完成的任何工作都将丢失(例如,长时间运行的网络呼叫的任何进度) ,因为当你的View被销毁时你的协程被取消了.相比之下,如果您在自己的协程中启动协同程序ViewModel
,然后将结果放在LiveData
:
onCleared
而不是在配置更改时取消协同程序.LiveData
仅当View存在且处于活动(前台)状态时才会调用观察者,因此当View未准备好(或不再存在)时,您不必担心获得结果.LiveData
并接收已加载的值.或者,如果您的数据仍在加载,它甚至最终会收到为前一个View实例启动的网络调用的结果. 归档时间: |
|
查看次数: |
1169 次 |
最近记录: |