【发布时间】: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