StateFlow et SharedFlow
Exposez l'état réactif de votre application.
StateFlow et SharedFlow est une leçon Android Academy gratuite sur CoddyKit. Ceci est la leçon 4 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.
Flux chauds
Contrairement aux flux froids, StateFlow et SharedFlow sont chauds : ils existent indépendamment des collecteurs et peuvent être partagés entre plusieurs d'entre eux.
StateFlow contient un état
Un StateFlow contient toujours une valeur actuelle. Les nouveaux collecteurs reçoivent immédiatement cette dernière valeur. Il est idéal pour l'état de l'interface utilisateur.
private val _count = MutableStateFlow(0)
val count: StateFlow<Int> = _count.asStateFlow()Mettre à jour StateFlow
Définissez directement .value ou utilisez update pour effectuer une lecture-modification-écriture atomique.
_count.value++
// or, atomically:
_count.update { it + 1 }StateFlow regroupe et déduplique les valeurs
StateFlow ne conserve que la dernière valeur (regroupement) et n'émet rien si la nouvelle valeur est égale à l'ancienne. Cela évite les mises à jour superflues de l'interface utilisateur.
SharedFlow pour les événements
Un SharedFlow n'a aucune valeur actuelle obligatoire et peut rejouer un nombre configurable d'émissions passées. Il convient aux événements ponctuels, comme la navigation ou l'affichage d'une notification.
private val _events = MutableSharedFlow<String>()
val events: SharedFlow<String> = _events.asSharedFlow()Émettre des événements
Émettez dans un SharedFlow depuis une coroutine.
fun onSave() {
viewModelScope.launch {
_events.emit("Saved!")
}
}Pourquoi ne pas utiliser StateFlow pour les événements
StateFlow conserve la dernière valeur : un collecteur qui se réabonne (après une rotation) recevrait à nouveau l'ancien événement et pourrait, par exemple, naviguer deux fois. SharedFlow évite la relecture par défaut.
Configurer SharedFlow
Ajustez replay et extraBufferCapacity pour contrôler la mise en mémoire tampon et le comportement de contre-pression.
MutableSharedFlow<String>(
replay = 0,
extraBufferCapacity = 1
)Convertir un flux froid en StateFlow
Utilisez stateIn pour transformer le flux froid en amont en un StateFlow partagé, associé au scope du ViewModel.
val uiState = repo.stream()
.stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(5000),
UiState()
)Choisir entre les deux
- StateFlow → état actuel de l'écran (possède toujours une valeur).
- SharedFlow → événements transitoires (déclenchés une seule fois).
Collecter les deux
Collectez StateFlow avec collectAsStateWithLifecycle dans Compose ; collectez les événements SharedFlow dans un LaunchedEffect pour les traiter une seule fois.
LaunchedEffect(Unit) {
vm.events.collect { msg -> showSnackbar(msg) }
}Vérification rapide
Vérifiez votre compréhension de StateFlow et SharedFlow.
Récapitulatif
Vous avez appris que :
- StateFlow est un conteneur d’état actif avec fusion des valeurs et une valeur actuelle.
- SharedFlow est un flux d’événements actif avec une relecture configurable.
- Utilisez StateFlow pour l’état et SharedFlow pour les événements ponctuels.
stateInconvertit les flux froids en StateFlow.
Questions Fréquemment Posées
La leçon « StateFlow et SharedFlow » est-elle gratuite ?
Oui — le texte complet de « StateFlow et SharedFlow » 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 « StateFlow et SharedFlow » ?
Exposez l'état réactif de votre application. 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 4 sur 4.
Combien de temps prend la leçon « StateFlow et SharedFlow » ?
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
- Bases des coroutines et des portées
- viewModelScope et Dispatchers
- Bases de Kotlin Flow
- StateFlow et SharedFlow