viewModelScope y Dispatchers
Ejecute el trabajo en el hilo correcto
viewModelScope y Dispatchers es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 2 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.
Scopes conscientes del ciclo de vida
Android proporciona scopes integrados que se cancelan automáticamente:
viewModelScope— se cancela cuando se libera el ViewModel.lifecycleScope— está vinculado al ciclo de vida de una Activity/Fragment.
Usar viewModelScope
Inicie el trabajo con datos en viewModelScope. Cuando se libera el ViewModel, la corrutina se cancela automáticamente, sin necesidad de realizar una limpieza manual.
class UserViewModel(
private val repo: UserRepository
) : ViewModel() {
fun load() {
viewModelScope.launch {
val users = repo.getUsers()
_uiState.value = UiState(users)
}
}
}Por qué no usar GlobalScope
Evite GlobalScope: sus corrutinas viven durante toda la ejecución de la aplicación y nunca están vinculadas a un ciclo de vida, lo que provoca fugas y trabajos que continúan después de que desaparece la pantalla.
¿Qué son los dispatchers?
Un Dispatcher decide en qué hilo (o conjunto de hilos) se ejecuta una corrutina. Elegir el adecuado mantiene libre el hilo principal.
Los dispatchers estándar
Dispatchers.Main— el hilo de la interfaz.Dispatchers.IO— para operaciones de E/S de red y disco.Dispatchers.Default— para trabajos que consumen mucha CPU.
viewModelScope usa Main de forma predeterminada
viewModelScope se inicia en Dispatchers.Main. Esto está bien para actualizar el estado, pero debe trasladar fuera de él los trabajos pesados.
Cambiar con withContext
Use withContext para ejecutar un bloque con otro dispatcher y volver después al código que lo llamó.
suspend fun loadFile(): String =
withContext(Dispatchers.IO) {
File("data.txt").readText()
}Funciones seguras para el hilo principal
Una función es segura para el hilo principal si se puede llamar desde ese hilo sin riesgos porque internamente cambia de contexto. Los repositorios deben ser seguros para el hilo principal, para que quienes los llaman nunca tengan que preocuparse por los hilos.
class Repo {
suspend fun getUsers() =
withContext(Dispatchers.IO) { dao.getAll() }
}Room y Retrofit son seguros para el hilo principal
Buenas noticias: los métodos suspend del DAO de Room y las llamadas suspend de Retrofit ya se ejecutan fuera del hilo principal. Normalmente no necesita un withContext explícito para ellos.
Trabajo de CPU en Default
Para cálculos pesados, como ordenar una lista enorme o analizar datos, use Dispatchers.Default para evitar que la interfaz se ralentice.
val sorted = withContext(Dispatchers.Default) {
bigList.sortedBy { it.score }
}Inyectar dispatchers
Para facilitar las pruebas, inyecte los dispatchers en lugar de escribirlos directamente en el código. Así, las pruebas pueden sustituirlos por un dispatcher de prueba.
class Repo(
private val io: CoroutineDispatcher = Dispatchers.IO
) {
suspend fun load() = withContext(io) { /* ... */ }
}Comprobación rápida
Compruebe cuánto entiende los scopes y los dispatchers.
Repaso
Ha aprendido lo siguiente:
viewModelScopecancela las corrutinas cuando se libera el ViewModel.- Evite
GlobalScope. - Elija los dispatchers: Main (interfaz), IO (red/disco), Default (CPU).
withContextcambia de hilo; procure que las funciones sean seguras para el hilo principal.
Aprende Kotlin con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 36
- Lecciones
- 152
Preguntas frecuentes
¿La lección «viewModelScope y Dispatchers» es gratis?
Sí — el texto completo de «viewModelScope y Dispatchers» 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 «viewModelScope y Dispatchers»?
Ejecute el trabajo en el hilo correcto 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 2 de 4.
¿Cuánto tiempo toma la lección «viewModelScope y Dispatchers»?
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
- Conceptos básicos y ámbitos de las corrutinas
- viewModelScope y Dispatchers
- Conceptos básicos de Kotlin Flow
- StateFlow y SharedFlow