Android:viewmodelscope是否取消与片段窗口分离的所有作业

时间:2019-07-16 12:19:20

标签: android kotlin viewmodel coroutinescope

我想知道在调用片段的onDetach时是否调用了viewmodel的oncleared。这是为了确保所有协程将被取消。我得到了一个IllegalStateException:在重构为Kotlin和协程之前,片段未附加到上下文。现在,我正在使用viemodelscope执行这些任务。

2 个答案:

答案 0 :(得分:0)

如果必须根据任何异步或API调用的结果执行任何Context或与UI相关的逻辑,即使调用onDetach也可能导致此问题。您应该进行安全检查,例如进行null检查,以摆脱该异常。

答案 1 :(得分:0)

如Google在official documentation上所述:

  

图1说明了活动的各种生命周期状态   进行旋转然后完成。插图还显示   关联活动旁边的ViewModel的生命周期   生命周期。此特定图表说明了   活动。 相同的基本状态适用于片段的生命周期。

这是图片:

enter image description here

因此答案是:从onCleared / onDestroy中调用Activity时,将调用ViewModel的Fragment

关于协程,您应该cancel() onCleared()上的工作