在片段中,当通过协同线执行保存操作时,应该使用的哪种类型的作用域作为主要考虑因素--旋转设备不应停止协同线?
我应该在哪里保存coroutine 作业引用,以便允许用户在仍在执行时随时取消它?即使是在轮换之后,如果愿意的话?如果我将作业放在ViewModel
中以便在设备rotation
之后恢复它,那么它是否泄漏了片段的lifecycleScope
我知道片段有一个作用域,例如:
fragment.lifecycleScope.launch(context = Dispatchers.IO)
但我不确定这是否是正确的使用,因为我假设旋转设备可能取消它。
此外,我也不知道下一次是否正确:
CoroutineScope(Dispatchers.IO)
发布于 2021-04-19 17:41:14
在ViewModel
中,u可以使用viewmodelscope
来表示一个协同线“-
viewModelScope.launch {
// Coroutine that will be canceled when the ViewModel is cleared.
}
然后,您可以使用liveData
与fragment
通信,因为liveData和视图模型都知道它也会处理旋转场景。
它应该能解决你的目的。
要使用viewModelScope
,我们需要生命周期版本2.2.0
及以上版本
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
https://stackoverflow.com/questions/67166641
复制相似问题