viewModelScope e Dispatchers
Execute o trabalho na thread correta.
viewModelScope e Dispatchers é uma aula grátis de Android Academy no CoddyKit. Esta é a aula 2 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 Android Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Android Academy inclui 4 aulas no total.
Escopos conscientes do ciclo de vida
O Android fornece escopos integrados que cancelam automaticamente:
viewModelScope— cancelado quando o ViewModel é liberado.lifecycleScope— vinculado ao ciclo de vida de uma Activity/Fragment.
Usando viewModelScope
Inicie o trabalho com dados em viewModelScope. Quando o ViewModel for liberado, a corrotina será cancelada por você — sem necessidade de limpeza manual.
class UserViewModel(
private val repo: UserRepository
) : ViewModel() {
fun load() {
viewModelScope.launch {
val users = repo.getUsers()
_uiState.value = UiState(users)
}
}
}Por que não usar GlobalScope
Evite GlobalScope: suas corrotinas vivem durante todo o funcionamento do aplicativo e nunca são vinculadas a um ciclo de vida, causando vazamentos e trabalhos que continuam depois que a tela desaparece.
O que são distribuidores?
Um distribuidor decide em qual thread (ou conjunto de threads) uma corrotina será executada. Escolher o correto mantém a thread principal livre.
Os distribuidores padrão
Dispatchers.Main— a thread da interface.Dispatchers.IO— para operações de E/S de rede e disco.Dispatchers.Default— para trabalhos intensivos de CPU.
viewModelScope usa Main por padrão
viewModelScope inicia as corrotinas em Dispatchers.Main. Isso é adequado para atualizar o estado, mas você deve mover trabalhos pesados para fora dele.
Alternando com withContext
Use withContext para executar um bloco em um distribuidor diferente e depois retornar ao chamador.
suspend fun loadFile(): String =
withContext(Dispatchers.IO) {
File("data.txt").readText()
}Funções seguras na thread principal
Uma função é segura na thread principal se pode ser chamada com segurança a partir dela porque faz a alternância internamente. Os repositórios devem ser seguros na thread principal, para que os chamadores nunca precisem se preocupar com threads.
class Repo {
suspend fun getUsers() =
withContext(Dispatchers.IO) { dao.getAll() }
}Room e Retrofit são seguros na thread principal
Boas notícias: os métodos suspend de DAO do Room e as chamadas suspend do Retrofit já são executados fora da thread principal. Normalmente, você não precisa de um withContext explícito para eles.
Trabalho de CPU em Default
Para computações pesadas, como ordenar uma lista enorme ou analisar dados, use Dispatchers.Default para evitar que a interface fique travando.
val sorted = withContext(Dispatchers.Default) {
bigList.sortedBy { it.score }
}Injetando distribuidores
Para facilitar os testes, injete os distribuidores em vez de codificá-los diretamente. Assim, os testes podem substituí-los por um distribuidor de teste.
class Repo(
private val io: CoroutineDispatcher = Dispatchers.IO
) {
suspend fun load() = withContext(io) { /* ... */ }
}Verificação rápida
Teste sua compreensão sobre escopos e distribuidores.
Recapitulação
Você aprendeu:
viewModelScopecancela as corrotinas quando o ViewModel é liberado.- Evite
GlobalScope. - Escolha os distribuidores: Main (interface), IO (rede/disco), Default (CPU).
withContextalterna entre threads; procure criar funções seguras na thread principal.
Aprenda Kotlin com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 36
- Aulas
- 152
Perguntas Frequentes
A aula “viewModelScope e Dispatchers” é grátis?
Sim — o texto completo de “viewModelScope e Dispatchers” é 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 Android Academy, atualize para CoddyKit PRO. O curso de Android Academy inclui 4 aulas no total.
O que vou aprender em “viewModelScope e Dispatchers”?
Execute o trabalho na thread correta. Você pratica Android 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 Android Academy?
Nenhuma experiência prévia é necessária. Android 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 2 de 4.
Quanto tempo leva a aula “viewModelScope e Dispatchers”?
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 Android Academy?
Sim. Cada aula de Android 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
- Fundamentos e escopos de corrotinas
- viewModelScope e Dispatchers
- Fundamentos do Kotlin Flow
- StateFlow e SharedFlow