Upgrade to Pro — share decks privately, control downloads, hide ads and more …

StateFlow y SharedFlow ¿el fin de LiveData?

StateFlow y SharedFlow ¿el fin de LiveData?

Una charla introductoria en la que hago un repaso por lo que son los SharedFlow, StateFlows y una pequeña comparativa con LiveData

Esta charla la brindé para la comunidad MacaoTech - Bolivia 🇧🇴

https://youtu.be/3B3spgYvrTA

Armando Picón

January 09, 2021
Tweet

More Decks by Armando Picón

Other Decks in Programming

Transcript

  1. ¿State Flow? ¿Shared Flow? Antes de hablar de StateFlow, es

    necesario definir lo que son los SharedFlow.
  2. Entonces ¿Qué es un SharedFlow? De acuerdo a Roman Elizarov,

    el papi de la implementación de las corutinas, channels y flow en Kotlin “Esencialmente un shared flow (un flujo compartido) es un bus de difusión de eventos ligero que tu puedes crear y usar en la arquitectura de tu aplicación”
  3. Flows • Los Kotlin Flows deberían ser empleado en aquellos

    casos en los que se precisa el retorno de múltiples valor computados asíncronamente • Los flujos como tal requieren de alguien que recolecte los resultados, por eso se indica que son “fríos” (cold) • Flow está inspirado en frameworks reactivos como RxJava
  4. Flows - ¿Cómo funcionan? flow{ emit() } collect() Terminal flow

    operator map{} filter{} transform{} take() Flow builder operadores intermedios
  5. Dilema • Los Flows son fríos, por ello no funcionan

    hasta que alguien los recolecte. • Pero ¿qué hay con aquellos componentes que emiten datos independientemente de que alguien recolecta sus resultados o no? ¿qué hay con los eventos del usuario?
  6. Aquí es donde entra Shared Flow Como comentamos inicialmente, los

    Shared Flow son algo así como un event bus ligero y configurable.
  7. ¿...y los State Flows? Es un tipo de Shared Flow

    especializado. A diferencia de los Shared Flows, un State Flow solo aceptará un valor a la vez reemplazando el valor anterior cada vez que se genere uno nuevo. También, necesita ser inicializado mediante un valor inicial en su constructor.
  8. StateFlow vs LiveData Entre las principales diferencias se encuentran que

    StateFlow es parte de Kotlin y LiveData es parte de Android, por lo cual este último trae “de caja” manejo de estados para el ciclo de vida del componente de Android que lo consuma, mientras que StateFlow no lo tiene y por ello requiere de un esfuerzo extra para conseguir algo parecido.
  9. Lecturas recomendadas • Shared flows, broadcast channels https://elizarov.medium.com/shared-flows-broadcast-channels-899b675e805c • Should

    we choose Kotlin’s StateFlow or SharedFlow to substitute for Android’s LiveData? https://proandroiddev.com/should-we-choose-kotlins-stateflow-or-sharedflow-to-substitute-for-android-s-livedata-2d 69f2bd6fa5 • StateFlow and SharedFlow https://developer.android.com/kotlin/flow/stateflow-and-sharedflow • Should I use SharedFlow or StateFlow in place of LiveData? https://www.reddit.com/r/androiddev/comments/jwdbcf/should_i_use_sharedflow_or_stateflow_in_place_of/ • StateFlow vs LiveData https://www.reddit.com/r/android_devs/comments/goy67h/stateflow_vs_livedata/ • Migrating from LiveData to StateFlow https://medium.com/swlh/migrating-from-livedata-to-stateflow-4f28d6889a04