2

我正在尝试观察View Collection 和上游流停止的结果。但viewModel.testFlow在应用程序处于后台时仍在收集。为什么我无法观察到收集已停止?我观察到什么不对吗?

视图模型:

val testFlow = flow<Int> {
    for (i in 1..100) {
        delay(1000)
        Timber.e("testFlow: EMIT = $i")
        emit(i)
    }
}

活动:

override fun onViewCreated() {
        lifecycleScope.launch {
            viewModel.testFlow
                .flowWithLifecycle(lifecycle, Lifecycle.State.STARTED)
                .collect {
                    Timber.d("testFlow: $it Collected")
                }
        }
}

override fun onActivityPaused(activity: Activity) {
    super.onActivityPaused(activity)
    Timber.e("testFlow: onActivityPaused")
}

日志 生命周期图

https://medium.com/androiddevelopers/a-safer-way-to-collect-flows-from-android-uis-23080b1f8bda

4

1 回答 1

1

你是用Lifecycle.State.STARTED状态开始观察,当发射停止时Flow对应的方法是。如果方法被调用,则发射和收集将停止。ActivityonStop()onStop()Activity

如果要在onPause调用方法时停止发送和收集数据,可以使用Lifecycle.State.RESUMEDstate。

当应用程序进入调用的后台onStop()方法Activity以及使用Lifecycle.State.STARTED状态观察时,Flow您应该看到发射和收集停止。

于 2022-01-06T12:13:34.433 回答