我想知道在调用片段的onDetach时是否调用了viewmodel的oncleared。这是为了确保所有协程将被取消。我得到了一个IllegalStateException:在重构为Kotlin和协程之前,片段未附加到上下文。现在,我正在使用viemodelscope执行这些任务。
答案 0 :(得分:0)
如果必须根据任何异步或API调用的结果执行任何Context
或与UI相关的逻辑,即使调用onDetach
也可能导致此问题。您应该进行安全检查,例如进行null检查,以摆脱该异常。
答案 1 :(得分:0)
如Google在official documentation上所述:
图1说明了活动的各种生命周期状态 进行旋转然后完成。插图还显示 关联活动旁边的ViewModel的生命周期 生命周期。此特定图表说明了 活动。 相同的基本状态适用于片段的生命周期。
这是图片:
因此答案是:从onCleared
/ onDestroy
中调用Activity
时,将调用ViewModel的Fragment
。
关于协程,您应该cancel()
onCleared()
上的工作