【发布时间】:2020-10-07 14:52:27
【问题描述】:
我遇到了这个有趣的问题。我需要在插入后立即做一些工作,但是 viewModelScope 随机地,或者至少看起来像随机地,跳过除了第一个之外的函数。
例子:
fun insertItem(item: SingleItem) = viewModelScope.launch {
itemsRepository.insertItem(item)
increaseAmount(item.catId)
}
所以在这个例子中,只有在新的应用程序安装后一切运行正常,但是在下一个应用程序启动时,第二个函数“increaseAmount”将被随机跳过,我不知道为什么。 第一个函数之后的内容并不重要。我尝试了简单的“日志”,它也被跳过了。 viewModelScope 正常吗?
编辑 检查异常。第二个函数抛出作业被取消的异常:
kotlinx.coroutines.JobCancellationException: Job was cancelled; job=SupervisorJobImpl{Cancelling}@2d87ff
另外,在我的 Fragment 中它是这样调用的:
viewModel.insertItem(newItem)
root.findNavController().popBackStack()
所以在调用这个函数之后,我会回到之前的 Fragment。 viewModel 是否有可能在完成所有工作之前被销毁?
【问题讨论】:
-
itemRepository.insertItem可能会抛出异常。你检查了吗?
标签: android kotlin viewmodel kotlin-coroutines coroutinescope