flowWithLifecycle(lifecycle, Lifecycle.State.STARTED) 在 App 处于后台时不会停止流程

flowWithLifecycle(lifecycle, Lifecycle.State.STARTED) doesn't stop flows while App is in background

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

视图模型:

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

Activity:

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

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

如果你想在调用onPause方法时停止发射和收集数据,你可以使用Lifecycle.State.RESUMED状态。

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