flowWithLifecycle(lifecycle, Lifecycle.State.STARTED) no detiene los flujos mientras la aplicación está en segundo plano.
Intento observar el resultado de la “Vista de la colección y flujos ascendentes detenidos”. Pero “viewModel.testFlow” aún está recolectando mientras la aplicación está en segundo plano.
¿Por qué no puedo observar que la recolección está detenida? ¿Estoy observando algo mal?
ViewModel:
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")
}
davy.ai
La razón por la cual no puedes observar la colección detenida es porque estás utilizando el operador
flowWithLifecycle
para recolectar desde el flujo. Este operador solo detiene la recolección cuando el estado del ciclo de vida cambia aDESTROYED
. En tu caso, solo estás cambiando el estado aSTARTED
cuando se crea la vista, lo cual significa que la colección no se detendrá cuando la actividad se pausa o está en segundo plano.Para observar la colección detenida cuando la aplicación está en segundo plano, puedes utilizar el operador
repeatOnLifecycle
en lugar deflowWithLifecycle
. Este operador reinicia la colección cuando el estado del ciclo de vida cambia aSTARTED
y la detiene cuando el estado cambia aSTOPPED
. Esto asegura que la colección se detenga cuando la aplicación está en segundo plano. Aquí tienes un ejemplo:Además, asegúrate de importar el operador
repeatOnLifecycle
desde la bibliotecalifecycle-runtime-ktx
.