Android Academy · Aula

viewModelScope e Dispatchers

Execute o trabalho na thread correta.

Aula 2 de 413 etapas

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:

  • viewModelScope cancela as corrotinas quando o ViewModel é liberado.
  • Evite GlobalScope.
  • Escolha os distribuidores: Main (interface), IO (rede/disco), Default (CPU).
  • withContext alterna entre threads; procure criar funções seguras na thread principal.
Grátis para começar

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

  1. Fundamentos e escopos de corrotinas
  2. viewModelScope e Dispatchers
  3. Fundamentos do Kotlin Flow
  4. StateFlow e SharedFlow
← Voltar para Android Academy