微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在具有两个 StateFlow 观察者的生命周期范围内,仅首先起作用

如何解决在具有两个 StateFlow 观察者的生命周期范围内,仅首先起作用

在我看来,我不太明白一些事情。你能解释一下为什么当我使用这个例子时,只有第一个 collect 对我有用。

    lifecycleScope.launch {
        viewmodel.test1.flowWithLifecycle(lifecycle,Lifecycle.State.STARTED).collect {
            Log.i("Log_tag",it)
        }
        viewmodel.test2.flowWithLifecycle(lifecycle,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,it)
        }

    }

    lifecycleScope.launch {
        viewmodel.test2.flowWithLifecycle(lifecycle,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 以具有返回类型 Nothing 以使其更清楚。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。