Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单例viewmodel中的kotlin-android-viewModelScope_Android_Kotlin_Mvvm_Viewmodel_Dagger 2 - Fatal编程技术网

单例viewmodel中的kotlin-android-viewModelScope

单例viewmodel中的kotlin-android-viewModelScope,android,kotlin,mvvm,viewmodel,dagger-2,Android,Kotlin,Mvvm,Viewmodel,Dagger 2,我的应用程序使用MVVM模式,并且希望将viewmodelscope用于协同程序,现在我面临一些与viewmodelscope相关的问题 在应用程序中,有两个片段,每个片段都有一个viewmodel。从片段一导航到片段二,在第二个片段,用户将点击API。如果响应为false,用户将再次返回到第一个片段,并需要修复其输入。然后用户可以再次导航到片段2并再次点击API 问题是在第二次尝试时,应用程序无法命中API,因为在第一次尝试时,viewmodel中的协同路由已在ondestroy状态下取消(它

我的应用程序使用MVVM模式,并且希望将viewmodelscope用于协同程序,现在我面临一些与viewmodelscope相关的问题

在应用程序中,有两个片段,每个片段都有一个viewmodel。从片段一导航到片段二,在第二个片段,用户将点击API。如果响应为false,用户将再次返回到第一个片段,并需要修复其输入。然后用户可以再次导航到片段2并再次点击API

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

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

  • 我建议你对你的活动使用单一的ViewModel,那么这个活动中的所有片段都将共享它,这就是谷歌发明ViewModel的原因
  • 此viewModel将遵循Activity的生命周期,您不需要将其设置为singleton,只需在Activity.onCreate()中获取它即可

  • ViewModels不是全局单例,每次调用工厂创建ViewModel时,您都需要创建一个新的ViewModel实例。
    create()
    a ViewModel。我计划在我的应用程序中使用具有许多片段的单个活动。如果我使viewmodel遵循活动生命周期,viewmodel是否将保持活动状态,直到用户销毁应用程序?