Hace mucho tiempo, los desarrolladores de Android usaban componentes como Activity y Servicios. Se enfrentaban a problemas grandes para hacer funcionar todo.1 Parecía que cada uno peleaba solo contra Megatron. Pero hoy, tenemos a nuestro lado un héroe: los Componentes de Arquitectura. Gracias a estos, podemos manejar mejor el ciclo de vida, los datos y otras cosas.
Cuando trabajamos con aplicaciones Android, es vital entender el ciclo de vida. Nos ayuda a evitar problemas como fugas de memoria. Sin embargo, este proceso puede ser complicado al principio. Ahí es donde entran estas nuevas herramientas. Ellas hacen varias tareas por nosotros, de forma más fácil.
Aspectos clave:
- Los Componentes de Arquitectura de Android, como MVVM y LiveData, simplifican la gestión del ciclo de vida, los datos y la memoria de las aplicaciones.
- El patrón de diseño MVVM separa la lógica de la interfaz de usuario de la lógica empresarial, facilitando así el mantenimiento y la calidad del código.
- LiveData es una clase observable que entiende el ciclo de vida, simplificando la sincronización de datos y actualizando la interfaz de usuario automáticamente.
- Room y Lifecycle son partes esenciales de estos Componentes de Arquitectura. Facilitan la gestión de la base de datos y del ciclo de vida.
- Para usar MVVM y LiveData, debemos configurar Room, desarrollar un repositorio, implementar ViewModel y unir la interfaz de usuario con la capa de datos.
¿Qué es MVVM?
MVVM es un patrón arquitectónico para mejorar la organización. Ayuda a dividir la vista del usuario de la parte lógica del sistema.2 Se centra en mantener el código de la interfaz simple y sin lógica de negocio.2
Modelo-Vista-VistaModelo
Este modelo tiene tres componentes clave. El Modelo representa los datos del sistema.2 La Vista es lo que el usuario ve y puede ser un elemento visual.2 El VistaModelo conecta la vista con el modelo, maneja las interacciones y actualizaciones.2
Separación de preocupaciones
El VistaModelo se ocupa de la lógica de comunicación entre vista y modelo.2 Permite a la vista observar cambios en los datos y reaccionar en consecuencia.2
Manteniendo el código UI simple
Uno de los principales objetivos es que la Vista sea sencilla y no contenga mucha lógica de negocio.2
Agregando dependencias
Para usar la arquitectura MVVM y las Android Architecture Components, añadimos las bibliotecas Room y Lifecycle a nuestro proyecto.2 Room nos da acceso a los datos en la base de datos y nos ayuda a trabajar con ellos.2 Lifecycle trae herramientas importantes como ViewModel y LiveData. Estas nos permiten gestionar el ciclo de vida de la app.2
Para añadir estas herramientas, editamos el archivo build.gradle (Módulo: app) y las agregamos al final de las dependencias.2 Al hacerlo, nuestra app se vuelve más eficiente. Podemos seguir patrones de diseño modernos como MVVM y usar programación reactiva.3
Dependencia | Versión |
---|---|
room | 2.4.3 |
lifecycle-extensions | 2.2.0 |
Estas bibliotecas son clave para seguir el buen camino en la construcción de nuestra app de notas. Nos ayudan a dividir las tareas para un código de calidad y un desarrollo veloz.3
Configurando Room
Room tiene 3 partes clave: Entidad, Dao y Base de Datos. La Entidad es como un POJO pero también actúa como tabla.2 El DAO, definido como una interfaz, maneja las operaciones de base de datos con anotaciones como Dao. Incluye cómo crear, leer, actualizar y eliminar datos.4 Para conectar Entidades con DAOs, creamos una clase que extiende RoomDatabase y la marcamos con «@Database». La base de datos se construye en tiempo de ejecución usando Room.databaseBuilder() para dispositivos o Room.inMemoryDatabaseBuilder() para memoria.
Anotación @Entity
Anotación @Dao
Anotación @Database
Android Architecture Components: MVVM y LiveData
En este artículo, nos enfocaremos en un subconjunto de componentes. Crearemos una app de notas. Esta app tomará entradas del usuario, las guardará en una base de datos local y las mostrará en la pantalla.
LiveData es una clase que observa datos. Es consciente del ciclo de vida de otros elementos de la app. Por ejemplo, actualiza solo a quienes están mirando y están realmente activos.
Además, ayuda a que tu app no tenga errores de memoria. Hace que la app se actualice sola cuando cambian los datos. Es muy usado para guardar datos que la app muestra en pantalla.
Cuando usas LiveData, tu app funciona mejor. Solo se actualiza si alguien está mirando. Esto ahorra energía del dispositivo.5 Además, puedes cambiar los datos guardados en LiveData de una manera especial.5 También, si usas Room, puedes hacer consultas que vean si los datos cambian.5
LiveData es clave para hacer apps modernas en Android. Ayuda a que la app se vea actualizada sin esfuerzo. Puedes usarlo con ViewModel para hacer un mejor código. Así, tu app será más fácil de mantener y trabajar en ella será más divertido.
Entendiendo LiveData
LiveData es una clase que guarda y comparte datos.2 Se diferencia de observables comunes porque entiende el ciclo de vida. Esto ayuda a actualizar solo cuando es necesario.2 Además, permite que la interfaz se actualice según los cambios en los datos.
LiveData es consciente del ciclo de vida
Vale la pena notar que LiveData se preocupa por el ciclo de vida de las partes de la aplicación.2 Se asegura de que si un componente no está activo, no se le dará información fresca.
Observando objetos LiveData
LiveData chancea que las partes gráficas vean los cambios en los datos.2 Entonces, si la información se modifica, las ventanas se actualizan automáticamente.
Creando una clase de repositorio
La clase de repositorio es vital en la arquitectura MVVM.2 Aquí se decide dónde buscar los datos, ya sea en una API o en la base de datos local.2 Integrando esta lógica en un solo lugar, simplificamos el acceso a datos.2 Usamos también Room, una biblioteca, para manejar las notas.
Room se encarga de todo en un hilo aparte para no detener la interfaz.2 Para esto, utilizamos AsyncTask en el repositorio.2 Así, la app siempre responde de forma rápida para los usuarios.2
Al usar el repositorio, separamos claramente datos de cómo se muestran.3 Esto simplifica mejorar y hacer crecer la app.3 Además, hace que sea más fácil probar y reusar partes en otros proyectos.3
Con este método, los desarrolladores no tienen que preocuparse por los ciclos de las pantallas.3 Esto les da más libertad y hace la app más estable.3
Implementando ViewModel
ViewModel es esencial para mover datos entre el repositorio y la interfaz de usuario.6 Ayuda a mantener los datos al evitar volver a cargarlos durante cambios de configuración.6 Está conectado con el ciclo de vida, lo que asegura que la información se mantenga disponible hasta que sea realmente necesaria.6
ViewModel sobrevive cambios de configuración
Guarda los datos durante cambios de configuración y los vuelve a conectar cuando sea necesario.6 Gracias a SavedStateHandle, los datos se mantienen incluso si la aplicación se cierra y se vuelve a abrir.6
Comunicación más fácil entre fragmentos
El uso de AndroidViewModel se justifica por la necesidad de un contexto de aplicación.6 Simplifica la lógica del negocio en la capa de interfaz de usuario y facilita la comunicación entre las diferentes partes de la aplicación.6 Junto con Jetpack Compose, permite una gestión más efectiva del estado de la interfaz de usuario en la pantalla.6 Gracias a métodos como insert() o deleteAllNotes(), se puede trabajar con datos de un modo más organizado.
6 La vida de ViewModel va desde su creación hasta que su propietario deja de existir. Esto es perfecto para manejar datos que necesiten persistir a través de los cambios.6 Al final, el método onCleared es llamado automáticamente, ayudando a dejar todo en orden antes de que el ViewModel ya no sea necesario.6 Además, ViewModel usa corrutinas para un manejo adecuado de actividades asíncronas, manteniendo la app fluida y coherente en el manejo de datos.6
Añadiendo un adaptador y RecyclerView
Primero, creamos un diseño llamado note_item.xml. Este diseño tiene un título y una descripción en un LinearLayout vertical.7 Luego, insertamos un RecyclerView en activity_main.xml para ver las notas.8
Después, necesitamos añadir dependencias para RecyclerView y CardView en build.gradle.8 Además, creamos un adaptador. Este adaptador mostrará los datos en la pantalla.8
Layouts como LinearLayout, RelativeLayout, y otros ayudarán a que nuestra aplicación luzca bien.7 Hacer una interfaz atractiva con estos diseños es fácil. Será además sensible, ideal para una app de notas.
Usando el patrón MVVM,7 dividimos la lógica de la interfaz de usuario de la empresa. Esto hace nuestra aplicación más fácil de mantener y escalar a medida que crece.7
Llenando la base de datos
Cuando iniciamos la aplicación, agregamos datos y borramos los antiguos. Usamos PopulateDbAsyncTask, una tarea2 AsyncTask. Esta nos ayuda a insertar y eliminar información. Así, mantenemos la arquitectura de aplicaciones Android, los patrones de diseño MVVM, y cuidamos la calidad del código.
Para acceder a la base de datos local en nuestra app, usamos Room. También utilizamos LiveData para ver los cambios en los datos2. Al arrancar la app, borramos lo viejo y llenamos la base con datos de ejemplo. De esta forma, mostramos cómo funciona MVVM y LiveData.
Tener en orden el código según los preceptos de arquitectura de aplicaciones Android y patrones de diseño MVVM es útil. Nos deja tomar decisiones más fácilmente y tener control de los datos en la aplicación2. Además, mejora la calidad del código y simplifica crear apps avanzadas para Android.
Conectando la UI y los datos
Para mostrar info de la base de datos, se usa LiveData en el VistaModelo.2 El ViewModelProvider crea este VistaModelo.2 Luego, unimos el VistaModelo con el ViewModelProvider. Así, al estar en el método onChanged, vemos siempre datos actualizados.
Observando cambios en LiveData desde ViewModel
Cuando cambian los datos de LiveData, la interfaz de usuario se actualiza sola.2 Gracias al manejo del ciclo de vida de LiveData, esto ocurre. Solo se actualiza para los observadores en un estado activo.
Actualizando la UI con ViewModelProvider
Con ViewModelProvider, creamos un VistaModelo y lo unimos a una parte de la interfaz de usuario.2 Este proceso separa claramente la parte visual de la lógica de negocio. Ayuda a hacer más fácil el mantenimiento y crecimiento de apps Android.
Creando una actividad para añadir notas
Estamos haciendo una actividad nueva en nuestra app de notas.2 Esta actividad se llama AddNoteActivity. Tiene dos espacios para escribir (EditText). Uno es para el título y otro para la descripción. También hay un botón para guardar la nota.2
Nuestra app de Android usa la arquitectura MVVM, lo nuevo y mejor que el MVP.3 La ventaja es que tenemos partes organizadas y menos enredadas entre sí. Gracias a herramientas como LiveData y ViewModel, manejamos mejor las tareas de la app.3
Cambiarse a MVVM no es imprescindible. Aunque Google recomienda usarlo, no es urgente si MVP funciona bien ya.3 Pasar de MVP a MVVM es bastante directo. Muchos piensan que es un cambio fácil de hacer.3
Enlaces de origen
- https://medium.com/@suraj_26072/android-architecture-components-room-viewmodel-and-livedata-df80040e7353
- https://cursokotlin.com/mvvm-en-android-con-kotlin-livedata-y-view-binding-android-architecture-components/
- https://devexpert.io/mvvm-vs-mvp/
- https://www.alura.com.br/conteudo/android-archtecture-components
- https://developer.android.com/topic/libraries/architecture/livedata
- https://developer.android.com/topic/libraries/architecture/viewmodel
- https://anywhere.epam.com/es/blog/preguntas-entrevista-en-kotlin
- https://developer.android.com/codelabs/android-room-with-a-view-kotlin?hl=es-419