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()
。如果调用Activity
的onStop()
方法,发射和收集将停止。
如果你想在调用onPause
方法时停止发射和收集数据,你可以使用Lifecycle.State.RESUMED
状态。
当应用程序进入后台时 onStop()
方法 Activity
被调用,当使用 Lifecycle.State.STARTED
状态观察 Flow
你应该看到发射和收集停止。
我正在尝试观察 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()
。如果调用Activity
的onStop()
方法,发射和收集将停止。
如果你想在调用onPause
方法时停止发射和收集数据,你可以使用Lifecycle.State.RESUMED
状态。
当应用程序进入后台时 onStop()
方法 Activity
被调用,当使用 Lifecycle.State.STARTED
状态观察 Flow
你应该看到发射和收集停止。