我的应用程序使用MVVM模式,并希望对协程使用viewmodelscope,现在我遇到了一些与viewmodelscope相关的问题

在应用程序中,有两个片段,每个片段都有一个 View 模型。从片段1导​​航到片段2,在第二个片段,用户将访问API。如果响应为假,则用户将再次返回第一个片段,并需要修正其输入。然后用户可以再次导航以分割两个片段并再次点击该API。

问题是在第二次尝试时,应用程序无法使用该API,因为协程已在第一次尝试时在 View 模型的ondestroy状态下被取消(由于 View 模型自身CMIIW的行为,它已自动取消)。由于我使所有viewmodel单例,所以我猜在第二次尝试时,被取消的viewmodelscope再次被调用并且不能运行协程(因为它在第一次尝试中已被取消)。

我的问题是,如果我继续对 View 模型使用单例,是否还有其他方法可以在第二次尝试中重置viewmodelscope,以便它可以再次运行以命中API?

最佳答案

  • 我建议您为Activity使用单个ViewModel,然后此Activity中的所有片段都将共享它,这就是Google发明ViewModel的原因。
  • 此viewModel将遵循Activity的LifeCycle,您无需使其成为单例,只需在Activity.onCreate()中获取它即可。
  • 关于android - kotlin-android-viewModelScope在单例viewmodel中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60768691/

    10-11 02:34