在有两个 StateFlow 观察者的生命周期范围内,只有第一个有效
In the lifecycle scope with two StateFlow observers, only first works
我好像有点不太明白。你能解释一下为什么当我使用这个例子时,只有第一个 collect 对我有用吗?
lifecycleScope.launch {
viewModel.test1.flowWithLifecycle(lifecycle, Lifecycle.State.STARTED).collect {
Log.i("Log_tag", it)
}
viewModel.test2.flowWithLifecycle(lifecycle, Lifecycle.State.STARTED).collect {
Log.i("Log_tag", it)
}
}
或者如果我这样称呼他们:
lifecycleScope.launch {
viewLifecycleOwner.lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED){
viewModel.test1.collect {
Log.i("Log_tag", it)
}
viewModel.test2.collect {
Log.i("Log_tag", it)
}
}
}
但是如果我在不同的协同程序中调用它们,那么它们都可以工作,如下所示:
lifecycleScope.launch {
viewModel.test1.flowWithLifecycle(lifecycle, Lifecycle.State.STARTED).collect {
Log.i("Log_tag", it)
}
}
lifecycleScope.launch {
viewModel.test2.flowWithLifecycle(lifecycle, Lifecycle.State.STARTED).collect {
Log.i("Log_tag", it)
}
}
视图模型:
class ForecastViewModel : ViewModel() {
private val _test1 = MutableStateFlow("")
private val _test2 = MutableStateFlow("")
val test1 = _test1.asStateFlow()
val test2 = _test2.asStateFlow()
fun getTest() {
viewModelScope.launch {
_test1.value = "test1"
_test2.value = "test2"
}
}
收集 StateFlow
永远不会完成,因为 StateFlows 不会终止。
这在意料之中。启动并发收集器是正确的。
(我想知道他们是否可以“覆盖”StateFlow.collect
让 return 键入 Nothing
以使其更清楚。)
我好像有点不太明白。你能解释一下为什么当我使用这个例子时,只有第一个 collect 对我有用吗?
lifecycleScope.launch {
viewModel.test1.flowWithLifecycle(lifecycle, Lifecycle.State.STARTED).collect {
Log.i("Log_tag", it)
}
viewModel.test2.flowWithLifecycle(lifecycle, Lifecycle.State.STARTED).collect {
Log.i("Log_tag", it)
}
}
或者如果我这样称呼他们:
lifecycleScope.launch {
viewLifecycleOwner.lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED){
viewModel.test1.collect {
Log.i("Log_tag", it)
}
viewModel.test2.collect {
Log.i("Log_tag", it)
}
}
}
但是如果我在不同的协同程序中调用它们,那么它们都可以工作,如下所示:
lifecycleScope.launch {
viewModel.test1.flowWithLifecycle(lifecycle, Lifecycle.State.STARTED).collect {
Log.i("Log_tag", it)
}
}
lifecycleScope.launch {
viewModel.test2.flowWithLifecycle(lifecycle, Lifecycle.State.STARTED).collect {
Log.i("Log_tag", it)
}
}
视图模型:
class ForecastViewModel : ViewModel() {
private val _test1 = MutableStateFlow("")
private val _test2 = MutableStateFlow("")
val test1 = _test1.asStateFlow()
val test2 = _test2.asStateFlow()
fun getTest() {
viewModelScope.launch {
_test1.value = "test1"
_test2.value = "test2"
}
}
收集 StateFlow
永远不会完成,因为 StateFlows 不会终止。
这在意料之中。启动并发收集器是正确的。
(我想知道他们是否可以“覆盖”StateFlow.collect
让 return 键入 Nothing
以使其更清楚。)