Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

236
Vistas
El flujo emite diferentes valores al recolectarlo varias veces

Creé un Flujo desde el cual emito datos. Cuando recopilo este flujo dos veces, hay 2 conjuntos diferentes de datos emitidos desde la misma variable en lugar de emitir los mismos valores a ambos colectores.

Tengo un flujo simple que creé yo mismo. El texto se registrará dos veces por segundo.

 val demoFlow: Flow<String> = flow { while (true) { val text = "Flow ${(0..100).random()}" Log.d("TAG", text) emit(text) delay(1000) } }

En mi viewModel tengo una función simple que obtiene el Flujo anterior

 fun getSimpleFlow() = FlowRepository.demoFlow

Y en mi Fragmento recopilo y muestro mi Flujo

 lifecycleScope.launch { repeatOnLifecycle(Lifecycle.State.STARTED) { launch { viewModel.getSimpleFlow().collect { binding.tv1.text = it } } launch { viewModel.getSimpleFlow().collect { binding.tv2.text = it } } } }

Si transformo el Flow en StateFlow o SharedFlow, ya no tengo este problema. No entiendo cómo o por qué sucede esto ya que estoy usando la misma variable 'demoFlow'. ¿Hay alguna manera de obtener los mismos valores de 'demoFlow' sin convertir a StateFlow o SharedFlow?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Los Flow regulares son fríos, este comportamiento es por diseño.

El demoFlow es el mismo, por lo que tiene la misma instancia de Flow . Sin embargo, recopilar el flujo varias veces en realidad ejecuta el cuerpo dentro de la definición de flow { ... } cada vez desde el principio. Cada colección independiente tiene su propia variable i , etc.

El uso de StateFlow o SharedFlow permite compartir la fuente del flujo entre varios recopiladores. Si usa shareIn o stateIn en algún flujo de origen, ese flujo de origen solo se recopila una vez, y los elementos recopilados de este flujo de origen se comparten y envían a cada recopilador del estado/flujo compartido resultante. Por eso se comporta diferente.

En resumen, reutilizar una instancia de Flow no es suficiente para compartir la colección. Debe usar tipos de flujo que estén diseñados específicamente para esto.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda