Reemplace LiveData con StateFlow. ¿Qué tal limpiar tanto Android como sea posible? lähde: Cesar Morigaki | Octubre de 2020

Una foto de Pablo García Saldaña en Unsplash

Con el auge del hype KMM (Kotlin multiplataforma móvil), elimine tantas adicciones a Android como podamos para aumentar plataforma independiente ¿código?
Datos en tiempo real es ampliamente utilizado por la comunidad de Android para administrar y representar estados de pantalla. En las siguientes situaciones sin peligro reemplazar necesitamos considerar algunos detalles de implementación.

El desarrollo para Android es difícil por algunas razonescony uno de ellos trabaja con el ciclo de vida de sus principales componentes: Actividad y Fragmento. Sin el tratamiento adecuado, esto puede provocar muchos problemas, como pérdidas de memoria y bloqueos. Datos en tiempo real Yippee consciente del ciclo de vida una solución de observación que reduce el esfuerzo requerido para abordar estas complejidades.

El idioma Kotlin está en constante evolución y StateFlow es una de las ediciones de este año. Está diseñado para manipular escenarios de publicación estatal y ha estado disponible desde v1.3.6.

Y Fluir que representa un estado de solo lectura con una única fecha actualizable valor que emite actualizaciones de valor a sus recolectores

Esto significa que es un candidato ideal para el intercambio. Datos en tiempo real.

Resolveré el caso de uso principal. Datos en tiempo real: Procesando estados de visualización con y ViewModel Automóvil club británico Fragmento. A continuación se muestra una implementación simple:

ViewModel usando LiveData
Observando LiveData en MainFragment

Primero debemos agregar las siguientes dependencias:

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'

El código final se ve así:

ViewModel usando StateFlow
Observando StateFlow en MainFragment

Cabe señalar algunas diferencias:

Siempre tiene valor
StateFlow siempre tiene un valor que se puede leer con seguridad en cualquier momento a través de value propiedad. Al crear una instancia StateFlow, debemos ingresar un valor inicial para asegurarnos de que comience con el estado. Buen diseño en mi opinión!

lifecycleScope
Mediante el uso lifecycleScope extensión, adaptamos el consumo de caudal al ciclo de vidaLiveData utilizando viewLifecycleOwner. Tras la destrucción, se descarta el contexto de la co-rutina.

launchWhenStarted
LiveData emite solo cuando LifecycleOwner está en un estado activo. Suspende su consumo si el estado del ciclo de vida es «inferior» a El ha comenzado. Debemos usar esto para replicar este comportamiento. launchWhenStarted.

  • En el momento de escribir este artículo, Android Studio no me proporcionó la ayuda correcta para importar el archivo. collect extensión. Si te sucede lo mismo, debes agregarlo manualmente.
import kotlinx.coroutines.flow.collect
  • La API de StateFlow está debajo @ExperimentalCoroutinesAPI pero, como se señaló, es muy poco probable que cambie el núcleo del diseño.
  • También escribí un artículo para SingleLiveEvent intercambio, reemplazo. ¡Mira eso!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *