gpt4 book ai didi

android - 从多个状态流中收集

转载 作者:行者123 更新时间:2023-12-04 00:49:23 25 4
gpt4 key购买 nike

我的 viewModel 中有 2 个 stateFlow。要在 fragment 中收集它们,我必须启动协程 2 次,如下所示:

    lifecycleScope.launchWhenStarted {
stocksVM.quotes.collect {
if (it is Resource.Success) {
it.data?.let { list ->
quoteAdapter.submitData(list)
}
}
}
}

lifecycleScope.launchWhenStarted {
stocksVM.stockUpdate.collect {
log(it.data?.data.toString())
}
}
如果我有更多的 stateFlow,我必须分别启动协程。有没有更好的方法来处理我的 Fragment/Activity 或任何地方的多个 stateFlow?

最佳答案

您将需要不同的协程,因为 collect()是一个暂停功能,直到您的 Flow终止。
对于收集多个流,当前推荐的方法是:

lifecycleScope.launch {
lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
launch {
stocksVM.quotes.collect { ... }
}

launch {
stocksVM.stockUpdate.collect { ... }
}
}
}
注意 launchWhenStarted 的问题是虽然您新发出的项目不会被处理,但您的生产者仍将在后台运行。
我肯定会读一读,因为它很好地解释了当前的最佳实践: https://medium.com/androiddevelopers/a-safer-way-to-collect-flows-from-android-uis-23080b1f8bda

关于android - 从多个状态流中收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67799859/

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