Chamadas suspend no ViewModel
Busque dados fora da linha principal.
Chamadas suspend no ViewModel é uma aula grátis de Jetpack Compose Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Jetpack Compose Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Jetpack Compose Academy inclui 4 aulas no total.
Partes desta aula ainda não foram traduzidas e aparecem em 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.
Perguntas Frequentes
A aula “Chamadas suspend no ViewModel” é grátis?
Sim — o texto completo de “Chamadas suspend no ViewModel” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Jetpack Compose Academy, atualize para CoddyKit PRO. O curso de Jetpack Compose Academy inclui 4 aulas no total.
O que vou aprender em “Chamadas suspend no ViewModel”?
Busque dados fora da linha principal. Você pratica Jetpack Compose Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Jetpack Compose Academy?
Nenhuma experiência prévia é necessária. Jetpack Compose Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Chamadas suspend no ViewModel”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Jetpack Compose Academy?
Sim. Cada aula de Jetpack Compose Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Definindo uma Interface de API Retrofit
- Analisando JSON com Moshi
- Chamadas suspend no ViewModel
- Interface de Carregamento, Sucesso e Erro