Llamadas suspend en el ViewModel
Obtenga datos fuera del hilo principal.
Llamadas suspend en el ViewModel es una lección gratuita de Jetpack Compose Academy en CoddyKit. Esta es la lección 3 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 Jetpack Compose Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Jetpack Compose Academy incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
Never Block the Main Thread
Network calls take time, and doing them on the UI thread freezes your app. You move that work off the main thread instead.
Make the Endpoint suspend
Mark your Retrofit function with the suspend keyword. Now it returns the parsed result directly and can pause without blocking. ⏸️
@GET("users")
suspend fun getUsers(): List<User>The ViewModel Owns the Logic
Fetching data belongs in the ViewModel, not the Composable. It survives rotation and keeps your UI code purely about display.
class UserViewModel : ViewModel() {
// network logic lives here
}Launch With viewModelScope
A suspend function needs a coroutine. viewModelScope gives you one that is cancelled automatically when the ViewModel clears.
viewModelScope.launch {
val users = api.getUsers()
}Store the Result in State
Once the call returns, save the data into a state property so Compose can observe it and redraw the screen.
var users by mutableStateOf<List<User>>(emptyList())Wrap It In a try-catch
Networks fail, so guard the call with try-catch. An unhandled exception in a coroutine can crash your whole app.
try {
users = api.getUsers()
} catch (e: Exception) {
// handle failure
}Fetch on Init
Trigger the first load in the ViewModel's init block, so data starts arriving the moment the screen is created.
init {
loadUsers()
}Keep It in a Function
Wrap the fetch in a named function like loadUsers. That makes it easy to call again for retry or pull-to-refresh.
fun loadUsers() = viewModelScope.launch {
users = api.getUsers()
}Dispatchers Handle Threading
Retrofit already runs the request on a background dispatcher, so you usually don't switch threads with Dispatchers.IO yourself.
Collect State in Compose
In your Composable, read the ViewModel's state. Because it's observable, Compose recomposes the instant fresh data lands.
val users = viewModel.usersCancellation Is Automatic
If the user leaves and the ViewModel clears, viewModelScope cancels the in-flight call, so you waste no work on a dead screen.
Quick Check
Which scope cancels its coroutines automatically when the ViewModel is cleared?
Recap: Calling From the ViewModel
You made endpoints suspend, launched them in viewModelScope, stored results in state, and caught errors. Next you'll render loading, success, and error states.
Preguntas frecuentes
¿La lección «Llamadas suspend en el ViewModel» es gratis?
Sí — el texto completo de «Llamadas suspend en el 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 Jetpack Compose Academy, actualiza a CoddyKit PRO. El curso de Jetpack Compose Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Llamadas suspend en el ViewModel»?
Obtenga datos fuera del hilo principal. Practicas Jetpack Compose 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 Jetpack Compose Academy?
No se requiere experiencia previa. Jetpack Compose 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 3 de 4.
¿Cuánto tiempo toma la lección «Llamadas suspend en el 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 Jetpack Compose Academy?
Sí. Cada lección de Jetpack Compose 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
- Definir una interfaz de API de Retrofit
- Analizar JSON con Moshi
- Llamadas suspend en el ViewModel
- Interfaz de carga, éxito y error