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(). AndroidViewModelfornece 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
- Por que usar um ViewModel?
- Expondo estado a partir do ViewModel
- O ciclo de vida do Android
- collectAsStateWithLifecycle