【问题标题】:kotlin - android - viewModelScope in singleton viewmodelkotlin - android - 单例视图模型中的 viewModelScope
【发布时间】:2020-07-01 06:25:32
【问题描述】:

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

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

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

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

【问题讨论】:

  • ViewModels 不是全局单例,每次你的 Factory 被调用到 create() 一个 ViewModel 时,你都需要创建一个新的 ViewModel 实例。

标签: android kotlin mvvm viewmodel dagger-2


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

【讨论】:

  • 我打算在我的应用程序中使用包含许多片段的单个活动。如果我让视图模型遵循活动生命周期,视图模型是否会一直保持活动状态,直到用户销毁应用程序?
猜你喜欢
  • 1970-01-01
  • 2020-10-07
  • 2019-10-11
  • 1970-01-01
  • 2021-05-21
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
相关资源
最近更新 更多