gpt4 book ai didi

android - 如何在应用程序最小化时暂停/停止收集/发送流中的数据?

转载 作者:行者123 更新时间:2023-12-04 23:57:32 26 4
gpt4 key购买 nike

我有一个 UseCase 和远程存储库,它们在循环中返回 Flow,我在 ViewModel 中收集 UseCase 的结果,如下所示:

viewModelScope.launch {
useCase.updatePeriodically().collect { result ->
when (result.status) {
Result.Status.ERROR -> {
errorModel.value = result.errorModel
}
Result.Status.SUCCESS -> {
items.value = result.data
}
Result.Status.LOADING -> {
loading.value = true
}
}
}
}

问题是当应用程序在后台(最小化)流程继续工作时。那么我可以在应用程序处于后台时暂停它,并在应用程序返回前台时恢复它吗?

而且我不想在我的 View ( fragment 或 Activity )中观察数据。

最佳答案

我会玩弄 stateIn运算符以及我当前在 View 中使用流的方式。

类似于:

val state = useCase.updatePeriodically().map { ... }
.stateIn(viewModelScope, SharingStarted.WhileSubscribed, initialValue)

然后像这样从 View 中使用它:

viewModel.flowWithLifecycle(this, Lifecycle.State.STARTED)
.onEach {

}
.launchIn(lifecycleScope)

有关如何从 UI 收集流量的其他可能方法:https://medium.com/androiddevelopers/a-safer-way-to-collect-flows-from-android-uis-23080b1f8bda

编辑:

如果您不想从 View 中使用它,您仍然必须向 VM 发出信号,表明您的 View 当前处于后台。像这样的东西:

private var job: Job? = null

fun start(){
job = viewModelScope.launch {
state.collect { ... }
}
}

fun stop(){
job?.cancel()
}



关于android - 如何在应用程序最小化时暂停/停止收集/发送流中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67763036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com