Pourquoi utiliser un ViewModel ?
Gérez proprement les changements de configuration.
Pourquoi utiliser un ViewModel ? est une leçon Android Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Android Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Android Academy comprend 4 leçons au total.
Qu’est-ce qu’un ViewModel ?
Un ViewModel est un composant de l’architecture Android conçu pour stocker et gérer les données liées à l’interface utilisateur tout en tenant compte du cycle de vie.
Il survit aux changements de configuration, comme la rotation de l’écran, afin que vos données ne soient pas détruites puis recréées chaque fois que le système reconstruit l’interface.
Le problème des changements de configuration
Lorsque vous faites pivoter l’appareil, Android détruit et recrée l’Activity. Tout état conservé dans l’Activity ou le composable est perdu.
- Un compteur revient à zéro.
- Une liste chargée disparaît.
- Une requête réseau peut redémarrer.
Le ViewModel résout ce problème en vivant en dehors du cycle de vie de l’instance de l’Activity.
Comment un ViewModel survit
Le framework maintient en vie la même instance de ViewModel lors des recréations. Lorsque la nouvelle Activity est créée, elle reçoit le ViewModel existant plutôt qu’un nouveau.
class CounterViewModel : ViewModel() {
var count = 0
private set
fun increment() {
count++
}
}Obtenir un ViewModel dans Compose
Dans Jetpack Compose, vous récupérez généralement un ViewModel avec l’assistant viewModel(). Il renvoie la même instance pour le propriétaire du cycle de vie.
import androidx.lifecycle.viewmodel.compose.viewModel
@Composable
fun CounterScreen(
vm: CounterViewModel = viewModel()
) {
Text("Count: " + vm.count)
}Séparation des responsabilités
Un ViewModel favorise une séparation claire :
- Couche d’interface (composables/Activities) : elle affiche uniquement l’état et relaie les événements.
- ViewModel : il contient l’état et la logique métier.
L’interface est ainsi plus légère et la logique plus facile à tester.
Portée et propriétaire du ViewModel
Un ViewModel est rattaché à un ViewModelStoreOwner, généralement une Activity, un Fragment ou une entrée de la pile de retour de navigation.
Il est automatiquement supprimé lorsque ce propriétaire est définitivement détruit, par exemple lorsque l’utilisateur quitte l’Activity en appuyant sur le bouton de retour.
Le rappel onCleared
Lorsque le ViewModel est finalement détruit, le framework appelle onCleared(). Utilisez-le pour libérer les ressources que vous avez ouvertes.
class MyViewModel : ViewModel() {
override fun onCleared() {
super.onCleared()
// cancel jobs, close listeners
}
}Ce qu’il ne faut PAS mettre dans un ViewModel
Ne conservez jamais de références vers des Views, des Activities ou un Context lié à l’interface dans un ViewModel. Comme le ViewModel survit à l’Activity, cela provoque des fuites mémoire.
Si vous avez besoin du contexte de l’application, utilisez plutôt AndroidViewModel.
AndroidViewModel pour le contexte de l’application
Lorsque vous avez réellement besoin d’un Context, étendez AndroidViewModel, qui fournit en toute sécurité le contexte application à longue durée de vie.
class PrefsViewModel(
app: Application
) : AndroidViewModel(app) {
private val context = getApplication<Application>()
}Transmettre des arguments au constructeur
Pour injecter des dépendances, comme un dépôt, dans un ViewModel, utilisez une ViewModelFactory ou un framework de DI tel que Hilt. Nous aborderons Hilt plus loin dans ce parcours.
class UserViewModel(
private val repo: UserRepository
) : ViewModel() {
// repo provided via a factory or Hilt
}Pourquoi les ViewModels sont importants
Les ViewModels sont un pilier de l’architecture Android moderne. Ils vous offrent :
- la survie aux changements de configuration ;
- une séparation claire entre l’interface et la logique ;
- une gestion de l’état prévisible et testable.
Vérification rapide
Vérifiez votre compréhension de l’utilité des ViewModels.
Récapitulatif
Vous avez appris que :
- un ViewModel stocke l’état de l’interface et survit aux changements de configuration ;
- il ne doit jamais conserver de références vers une View ou une Activity afin d’éviter les fuites ;
- il est rattaché à un propriétaire et supprimé via
onCleared(); AndroidViewModelfournit un Context d’application sûr.
Questions Fréquemment Posées
La leçon « Pourquoi utiliser un ViewModel ? » est-elle gratuite ?
Oui — le texte complet de « Pourquoi utiliser un ViewModel ? » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Android Academy, passe à CoddyKit PRO. Le cours Android Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Pourquoi utiliser un ViewModel ? » ?
Gérez proprement les changements de configuration. Tu pratiques Android Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Android Academy ?
Aucune expérience préalable n'est requise. Android Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Pourquoi utiliser un ViewModel ? » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Android Academy ?
Oui. Chaque leçon Android Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Pourquoi utiliser un ViewModel ?
- Exposer l'état depuis un ViewModel
- Le cycle de vie Android
- collectAsStateWithLifecycle