【发布时间】:2022-09-22 22:45:04
【问题描述】:
我正在尝试不同类型的流,例如带有通道的流、共享流和状态流。我所做的是,假设我有一个 MainActivity,在其中我有两个并排在顶部的按钮,在它们下方有一个 fragmentContainerView。最初,fragmentContainerView 没有任何片段。
现在我有一个 viewModel,我在循环中发出一系列 int 值,所有三种流类型都有 1 或 2 秒的延迟。而且我有 MainActivity、fragmentA 和 fragmentB 中的值的消费者(收集时,fragmentB 在所有三个流中都有 collectLatest)。单击button1 附加fragmentA,而Button2 附加fragmentB。
现在假设最初从 0 开始发出值后会发生什么。一旦发出值,mainActivity 就会开始接收。然后,当我单击 button1 时,fragmentA 开始从初始值 0 接收。一段时间后,我单击 button2 删除 FragmentA 并附加 FragmentB,现在 FragmentB 从具有 collectLatest 的值 0 开始接收。如果我再次单击 button1,fragmentA 从初始值 0 开始接收。
我可以理解,当片段不可见时,它们不应该接收任何值。但我想了解这是预期的行为,例如每当一个新片段可见时,它从初始值接收而不是 collectLatest 不起作用。我做错了什么或者为什么会这样?以前的初始值是否存储在某种形式的缓存中?如果我想在视图可见时在某个地方获取当前的最新值,我该怎么做?一些示例代码的指导会有所帮助。谢谢
标签: android kotlin kotlin-coroutines android-jetpack