Android 我如何调用一个协同程序,并获取它的作业引用以在其他点使用,并监听完成情况?

Android 我如何调用一个协同程序,并获取它的作业引用以在其他点使用,并监听完成情况?,android,kotlin,coroutine,kotlin-coroutines,Android,Kotlin,Coroutine,Kotlin Coroutines,我正在设置一个测试场景。我有两项活动 喷溅活动 家庭活动 以及一个名为repository的存储库,它被注入到这两个活动的viewmodels中。它也是单身汉。假设Repository类如下所示 class Repository { suspend fun getData(): List<Data> { delay(20000) return // the list } } 下面是问题陈述。假设我想从SplashActivity的vi

我正在设置一个测试场景。我有两项活动

喷溅活动 家庭活动 以及一个名为repository的存储库,它被注入到这两个活动的viewmodels中。它也是单身汉。假设Repository类如下所示

class Repository {
    suspend fun getData(): List<Data> {
        delay(20000)
        return // the list
    }
}
下面是问题陈述。假设我想从SplashActivity的viewmodel调用这个getData方法,然后跳到HomeActivity。在HomeActivity的viewmodel中,我想听听我在SplashActivity中调用的方法,然后等待它完成

因此,我不想让getData再次运行它的延迟方法,而是想继续SplashActivity的上一个调用,等待它完成并获取数据


我怎样才能继续这样做呢?我心里有个答案。但我觉得这有点像黑客。想知道更好的解决方案。另外,让我知道我是否错误地考虑了协同程序。

我可能会使用协同程序,因为您已经在使用生命周期库了。这样,无论调用方的作用域如何,您的数据都将始终可用。取消注册观察者不会中断执行

类存储库{ val data=liveData{ emitgetData } 私有数据:列表{ //工作 返回。。。 } } 如果您需要使用多状态回调,例如在执行过程中必须在home和login之间切换,您应该选择kotlinx通道或流。在这种情况下,你可能会发现方便从

类存储库{ val数据容器=容器 数据类MyData…:船只。水手 乐趣请求数据{ repositoryScope.launch{//为您的repo或继承的repo手动定义的范围 做工作 DataVesser.sailMyData…//随意驾驶船只 做更多的工作 DataVesser.sailMyData…//随意驾驶船只 } } } val repository=存储库 viewModelScope.launch{//scope将被取消并清除viewModel repository.dock.collect{…} }