0Pricing
Android Academy · Aula

Por que usar um ViewModel?

Lide adequadamente com alterações de configuração.

Por que usar um ViewModel? é uma aula grátis de Android Academy no CoddyKit. Esta é a aula 1 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.

O que é um ViewModel?

Um ViewModel é um componente da arquitetura do Android criado para armazenar e gerenciar dados relacionados à interface de forma consciente em relação ao ciclo de vida.

Ele sobrevive a mudanças de configuração, como rotações da tela, para que seus dados não sejam destruídos e recriados sempre que o sistema reconstruir a interface.

O problema das mudanças de configuração

Quando você gira o dispositivo, o Android destrói e recria a Activity. Qualquer estado mantido dentro da Activity ou do Composable é perdido.

  • Um contador volta a zero.
  • Uma lista carregada desaparece.
  • Uma solicitação de rede pode ser reiniciada.

O ViewModel resolve isso vivendo fora do ciclo de vida da instância da Activity.

Como um ViewModel sobrevive

O framework mantém a mesma instância de ViewModel ativa durante as recriações. Quando a nova Activity é criada, ela recebe o ViewModel existente, em vez de um novo.

class CounterViewModel : ViewModel() {
    var count = 0
        private set

    fun increment() {
        count++
    }
}

Obtendo um ViewModel no Compose

No Jetpack Compose, normalmente você recupera um ViewModel com o auxiliar viewModel(). Ele retorna a mesma instância para o proprietário do ciclo de vida.

import androidx.lifecycle.viewmodel.compose.viewModel

@Composable
fun CounterScreen(
    vm: CounterViewModel = viewModel()
) {
    Text("Count: " + vm.count)
}

Separação de responsabilidades

Um ViewModel incentiva uma divisão clara:

  • Camada da interface (Composables/Activities) apenas exibe o estado e encaminha eventos.
  • ViewModel mantém o estado e a lógica de negócio.

Isso torna a interface mais simples e facilita os testes da lógica.

Escopo e propriedade do ViewModel

Um ViewModel fica no escopo de um ViewModelStoreOwner, geralmente uma Activity, um Fragment ou uma entrada da pilha de retorno da navegação.

Ele é limpo automaticamente quando esse proprietário é destruído permanentemente, por exemplo, quando o usuário encerra a Activity pressionando o botão de voltar.

O retorno de chamada onCleared

Quando o ViewModel é finalmente destruído, o framework chama onCleared(). Use-o para liberar os recursos que você abriu.

class MyViewModel : ViewModel() {
    override fun onCleared() {
        super.onCleared()
        // cancel jobs, close listeners
    }
}

O que NÃO colocar em um ViewModel

Nunca mantenha referências a Views, Activities ou qualquer Context vinculado à interface dentro de um ViewModel. Como o ViewModel sobrevive à Activity, fazer isso causa vazamentos de memória.

Se precisar de um contexto da aplicação, use AndroidViewModel.

AndroidViewModel para o contexto da aplicação

Quando você realmente precisar de um Context, estenda AndroidViewModel, que fornece com segurança o contexto duradouro da aplicação.

class PrefsViewModel(
    app: Application
) : AndroidViewModel(app) {
    private val context = getApplication<Application>()
}

Passando argumentos ao construtor

Para injetar dependências, como um repositório, em um ViewModel, use uma ViewModelFactory ou um framework de DI, como o Hilt. Abordaremos o Hilt mais adiante nesta trilha.

class UserViewModel(
    private val repo: UserRepository
) : ViewModel() {
    // repo provided via a factory or Hilt
}

Por que os ViewModels são importantes

Os ViewModels são fundamentais na arquitetura moderna do Android. Eles oferecem:

  • Sobrevivência a mudanças de configuração.
  • Uma separação clara entre a interface e a lógica.
  • Gerenciamento de estado previsível e testável.

Verificação rápida

Teste sua compreensão sobre o motivo de usar ViewModels.

Recapitulação

Você aprendeu:

  • Um ViewModel armazena o estado da interface e sobrevive a mudanças de configuração.
  • Ele nunca deve manter referências a View ou Activity, para evitar vazamentos.
  • Ele fica no escopo de um proprietário e é limpo por meio de onCleared().
  • AndroidViewModel fornece um Context seguro da aplicação.

Perguntas Frequentes

A aula “Por que usar um ViewModel?” é grátis?

Sim — o texto completo de “Por que usar um 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 Android Academy, atualize para CoddyKit PRO. O curso de Android Academy inclui 4 aulas no total.

O que vou aprender em “Por que usar um ViewModel?”?

Lide adequadamente com alterações de configuração. 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 1 de 4.

Quanto tempo leva a aula “Por que usar um 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 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. Por que usar um ViewModel?
  2. Expondo estado a partir do ViewModel
  3. O ciclo de vida do Android
  4. collectAsStateWithLifecycle
← Voltar para Android Academy