Como desarrolladores Android modernos en Q2BSTUDIO nos encanta Jetpack ViewModel porque ofrece de forma segura supervivencia de estado en rotaciones y un viewModelScope para manejar corutinas. Sin embargo nos planteamos un experimento: construir una app robusta sin ViewModel para explorar alternativas que sean más portables hacia entornos como Kotlin Multiplatform. El resultado fue una arquitectura basada en Circuit Koin y Kotlin Flow aplicada a una app de ejemplo que lee datos de un barómetro y los muestra en pantalla sin perderlos al rotar y sin reactivar el sensor innecesariamente.

El reto principal fue reemplazar dos funcionalidades que aporta ViewModel de serie

span>Instancia persistente La capacidad de que una instancia sobreviva cambios de configuración.

span>Ámbito de corutina con ciclo de vida Un CoroutineScope que se cancela cuando el componente ya no es necesario.

Para sustituir ambos elementos rediseñamos la capa de datos y la de UI

Paso 1 La fuente de datos y un repositorio inteligente

En lugar de exponer un flujo frio que arranca para cada colector usamos un flujo caliente compartido mediante shareIn. El repositorio registra el listener del sensor cuando el flujo empieza y lo quita en awaitClose. El truco es compartir ese flujo en un CoroutineScope de vida de aplicación proporcionado por Koin y usar SharingStarted WhileSubscribed con un timeout de 5000 milisegundos. Esto significa que el sensor se registra solo cuando hay al menos un colector y se mantiene activo unos segundos después de que el último colector se desconecte. Si una rotación de pantalla crea rápidamente un nuevo colector dentro de ese margen el listener nunca se vuelve a registrar evitando work innecesario y ahorro de batería.

En Koin definimos un single que crea un CoroutineScope con SupervisorJob y un Dispatcher apropiado para que el mecanismo shareIn tenga un ancla de larga duración pero sin ejecutar el sensor indefinidamente.

Paso 2 La lógica de UI con el Presenter de Circuit

En la capa de presentación usamos el Presenter de Circuit como alternativa al ViewModel. La idea clave fue combinar una variable retenida con rememberRetained para conservar el último estado conocido a través de rotaciones y collectAsStateWithLifecycle para suscribirnos al flujo solo cuando la UI esté visible. Al pasar la variable retenida como initialValue a la recolección evitamos el parpadeo de estados intermedios y mostramos instantáneamente el último valor conocido hasta que llega la siguiente emisión del Flow.

En resumen la receta es delegar más responsabilidad al repositorio con shareIn y WhileSubscribed y usar en la capa de presentación primitives de Circuit como rememberRetained junto con collectAsStateWithLifecycle para controlar cuándo recoger y cuándo dejar de hacerlo.

Resultados y ventajas

La arquitectura resultante ofrece varios beneficios relevantes para proyectos modernos y para clientes de Q2BSTUDIO: es ViewModel less lo que facilita portar lógica a Kotlin Multiplatform, es lifecycle aware y ahorra batería al activar sensores solo cuando la UI está visible, y es resistente a la rotación de pantalla evitando recreaciones y parpadeos indeseados. Además esta aproximación encaja bien con prácticas de UI declarativa y concurrencia estructurada.

En Q2BSTUDIO aplicamos este tipo de soluciones a medida en proyectos de aplicaciones a medida y software a medida donde la eficiencia y la portabilidad son cruciales. Si buscas desarrollar una solución móvil o multiplataforma podemos ayudarte a diseñar la arquitectura óptima y a integrar servicios avanzados como inteligencia artificial y agentes IA para empresas. Conoce más sobre nuestras capacidades en desarrollo multiplataforma visitando desarrollo de aplicaciones y software multiplataforma y sobre nuestras soluciones de IA en inteligencia artificial para empresas.

También complementamos estas soluciones con servicios de ciberseguridad, pentesting, servicios cloud aws y azure, servicios inteligencia de negocio y Power BI, automatización de procesos y consultoría en IA para empresas. La experiencia técnica en diseño de flujos, gestión de ciclos de vida y optimización de recursos permite entregar aplicaciones robustas y eficientes adaptadas a cada cliente.

Si te interesa este enfoque experimental para evitar ViewModel en Android, o quieres explorar arquitecturas portables y optimizadas para tu proyecto, en Q2BSTUDIO podemos acompañarte desde la consultoría hasta la implementación completa de la solución.