android - kotlin - android - 单例 View 模型中的 viewModelScope

标签 android kotlin mvvm viewmodel dagger-2

我的应用程序使用 MVVM 模式,想要使用 viewmodelscope 作为协程,现在我面临一些与 viewmodelscope 相关的问题

在应用程序中,有两个 fragment ,每个 fragment 都有一个 View 模型。从 fragment 一导航到 fragment 二,在第二个 fragment 处,用户将点击 API。如果响应为 false,用户将再次返回到第一个 fragment 并需要修复他们的输入。然后用户可以再次导航到 fragment 二并再次点击 API。

问题在于第二次尝试时,应用程序无法访问 API,因为第一次尝试时协程已在 viewmodel 中的 ondestroy 状态下被取消(它会自动取消,因为这是 viewmodelscope 本身 CMIIW 的行为)。由于我将所有 viewmodel 设置为单例,所以我猜想在第二次尝试时,已取消的 viewmodelscope 会再次被调用并且无法运行协程(因为它在第一次尝试中已被取消)。

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

最佳答案

  1. 我建议你为你的Activity使用单个ViewModel,然后这个Activity中的所有fragment都会共享它,这就是Google发明ViewModel的原因。
  2. 这个viewModel会遵循Activity的LifeCycle,你不需要将其设置为单例,只需在Activity.onCreate()中获取它即可。

关于android - kotlin - android - 单例 View 模型中的 viewModelScope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60768691/

相关文章:

java - Android gridview/imageholder动态布局

kotlin - 使用 @Inject 注释的依赖注入(inject)如何在 micronaut Kotlin 中工作?

java - 如何在正在进行的循环中更新 Android Textview?

c# - 警告 - 在项目文件中找不到文件 'Views\file.xaml' 的父文件 'Views\file.xaml.cs'

EXTJS 6 MVVM 基础知识混淆

android - PhoneGap - 视口(viewport)上的目标密度 dpi

java - 从 Android 应用程序连接到 MySQL 服务器

android - 当我不使用 ContigouslyPagedList 时,ContigouslyPagedList onPageError

kotlin readLine 不适用于 gradlew run

c# - Unregister(this) 从所有内容中取消注册此实例?