如何解决旋转片段时使用哪个协程范围?我们可以从视图模型启动协程吗?
在片段中,通过协程执行保存操作时,应该使用哪种类型的范围主要考虑旋转设备不应停止协程?
我应该在哪里保存协程 Job 引用,以允许用户在执行时随时取消它?即使在旋转后,如果需要?如果我将作业放在 ViewModel
中以便在设备 rotation
之后恢复它,它会泄漏片段的 lifecycleScope
吗?
我知道一个片段有一个范围,例如:
fragment.lifecycleScope.launch(context = Dispatchers.IO)
但我不确定这是否正确使用,因为我认为旋转设备可能会取消它。
另外,我不确定下一个是否正确:
CoroutineScope(Dispatchers.IO)
解决方法
在 ViewModel
中,您可以launch {}
使用 viewmodelscope
like"-
viewModelScope.launch {
// Coroutine that will be canceled when the ViewModel is cleared.
}
然后您可以使用 liveData
与 fragment
通信,因为 liveData 和 viewmodel 都具有生命周期感知能力,它也可以处理旋转场景。
它应该可以解决您的目的。
要使用 viewModelScope
,我们需要生命周期版本 2.2.0
及更高版本
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。