0Pricing
Android Academy · Lección

¿Por qué usar un ViewModel?

Supere los cambios de configuración correctamente

¿Por qué usar un ViewModel? es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Android Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Android Academy incluye 4 lecciones en total.

¿Qué es un ViewModel?

Un ViewModel es un componente de la arquitectura de Android diseñado para almacenar y administrar datos relacionados con la interfaz de usuario de forma consciente del ciclo de vida.

Sobrevive a cambios de configuración, como las rotaciones de pantalla, por lo que los datos no se destruyen ni se vuelven a crear cada vez que el sistema reconstruye la interfaz.

El problema de los cambios de configuración

Al girar el dispositivo, Android destruye y vuelve a crear la Activity. Cualquier estado almacenado dentro de la Activity o del Composable se pierde.

  • Un contador vuelve a cero.
  • Una lista cargada desaparece.
  • Una solicitud de red podría reiniciarse.

ViewModel resuelve este problema al vivir fuera del ciclo de vida de la instancia de Activity.

Cómo sobrevive un ViewModel

El framework mantiene activa la misma instancia de ViewModel durante las recreaciones. Cuando se crea la nueva Activity, recibe el ViewModel existente en lugar de uno nuevo.

class CounterViewModel : ViewModel() {
    var count = 0
        private set

    fun increment() {
        count++
    }
}

Obtener un ViewModel en Compose

En Jetpack Compose, normalmente se obtiene un ViewModel con el helper viewModel(). Este devuelve la misma instancia para el propietario del ciclo de vida.

import androidx.lifecycle.viewmodel.compose.viewModel

@Composable
fun CounterScreen(
    vm: CounterViewModel = viewModel()
) {
    Text("Count: " + vm.count)
}

Separación de responsabilidades

Un ViewModel fomenta una separación clara:

  • Capa de UI (Composables/Activities): solo representa el estado y reenvía eventos.
  • ViewModel: contiene el estado y la lógica de negocio.

Esto hace que la UI sea más sencilla y que la lógica sea más fácil de probar.

Alcance y propietario del ViewModel

Un ViewModel tiene un alcance definido por un ViewModelStoreOwner, normalmente una Activity, un Fragment o una entrada de la pila de retroceso de navegación.

Se elimina automáticamente cuando ese propietario se destruye de forma permanente, por ejemplo, cuando el usuario finaliza la Activity al pulsar Atrás.

La devolución de llamada onCleared

Cuando el ViewModel se destruye finalmente, el framework llama a onCleared(). Úselo para liberar los recursos que haya abierto.

class MyViewModel : ViewModel() {
    override fun onCleared() {
        super.onCleared()
        // cancel jobs, close listeners
    }
}

Qué NO debe incluir en un ViewModel

Nunca conserve referencias a Views, Activities ni ningún Context vinculado a la UI dentro de un ViewModel. Como el ViewModel sobrevive a la Activity, hacerlo provoca fugas de memoria.

Si necesita un contexto de aplicación, use AndroidViewModel.

AndroidViewModel para el contexto de la aplicación

Cuando realmente necesite un Context, extienda AndroidViewModel, que proporciona de forma segura el contexto de application, de larga duración.

class PrefsViewModel(
    app: Application
) : AndroidViewModel(app) {
    private val context = getApplication<Application>()
}

Pasar argumentos al constructor

Para inyectar dependencias, como un repositorio, en un ViewModel, use un ViewModelFactory o un framework de DI como Hilt. Hilt se explica más adelante en este itinerario.

class UserViewModel(
    private val repo: UserRepository
) : ViewModel() {
    // repo provided via a factory or Hilt
}

Por qué son importantes los ViewModels

Los ViewModels son fundamentales en la arquitectura moderna de Android. Proporcionan:

  • Supervivencia a los cambios de configuración.
  • Una separación clara entre la UI y la lógica.
  • Una administración del estado predecible y comprobable.

Comprobación rápida

Compruebe su comprensión de por qué se usan los ViewModels.

Resumen

Ha aprendido lo siguiente:

  • Un ViewModel almacena el estado de la UI y sobrevive a los cambios de configuración.
  • Nunca debe contener referencias a View o Activity para evitar fugas.
  • Tiene un alcance definido por un propietario y se elimina mediante onCleared().
  • AndroidViewModel proporciona un Context seguro de la aplicación.

Preguntas frecuentes

¿La lección «¿Por qué usar un ViewModel?» es gratis?

Sí — el texto completo de «¿Por qué usar un ViewModel?» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Android Academy, actualiza a CoddyKit PRO. El curso de Android Academy incluye 4 lecciones en total.

¿Qué aprenderé en «¿Por qué usar un ViewModel?»?

Supere los cambios de configuración correctamente Practicas Android Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Android Academy?

No se requiere experiencia previa. Android Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «¿Por qué usar un ViewModel?»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Android Academy?

Sí. Cada lección de Android Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. ¿Por qué usar un ViewModel?
  2. Exponer el estado desde ViewModel
  3. El ciclo de vida de Android
  4. collectAsStateWithLifecycle
← Volver a Android Academy