0Pricing
Android Academy · Leçon

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() ;
  • AndroidViewModel fournit 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

  1. Pourquoi utiliser un ViewModel ?
  2. Exposer l'état depuis un ViewModel
  3. Le cycle de vie Android
  4. collectAsStateWithLifecycle
← Retour à Android Academy