Android kotlin coroutines, viewModelScope behavior
我有这个有趣的问题。 插入后我需要立即做一些工作,但是viewModelScope是随机的,或者至少看起来像是随机的,它会跳过除第一个函数以外的函数。
例:
1 2 3 4 | fun insertItem(item: SingleItem) = viewModelScope.launch { itemsRepository.insertItem(item) increaseAmount(item.catId) } |
因此,在此示例中,只有在全新安装应用程序后一切正常,但是在下一个应用程序启动后,第二个功能" increaseAmount"将被随机跳过,我不知道为什么。
而且,第一个功能执行完之后没有关系。 我尝试了简单的"日志",它也被跳过了。 viewModelScope是否正常?
编辑
检查异常。 第二个函数引发作业被取消的异常:
1 | kotlinx.coroutines.JobCancellationException: Job was cancelled; job=SupervisorJobImpl{Cancelling}@2d87ff |
另外,在我的片段中,它的调用方式如下:
1 2 | viewModel.insertItem(newItem) root.findNavController().popBackStack() |
因此,在调用此函数后,我将返回上一片段。 viewModel是否有可能在完成所有工作之前被销毁?
viewModelScope是否正常?
不它不是。在协程函数中,调用必须是顺序的。函数
编辑:
当获取
调用
您可以通过以下方式初始化片段中的
1 | private val viewModel: YourViewModel by activityViewModels() |
以这种方式初始化
要使用
1 | implementation"androidx.fragment:fragment-ktx:1.2.5" |