collectAsStateWithLifecycle
Collectez les flux en toute sécurité avec le cycle de vie.
collectAsStateWithLifecycle 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.
Collecter les flux en toute sécurité
Lorsqu’un composable collecte un flux, il devrait idéalement cesser de le collecter lorsque l’écran est en arrière-plan, puis reprendre lorsqu’il revient.
L’outil prévu à cet effet est collectAsStateWithLifecycle().
Le problème avec collectAsState
collectAsState() classique continue de collecter tant que le composable se trouve dans la composition — même lorsque l’application est en arrière-plan.
Cela peut gaspiller des ressources et traiter des mises à jour que l’utilisateur ne peut pas voir.
Voici collectAsStateWithLifecycle
Ce collecteur qui tient compte du cycle de vie suspend la collecte lorsque le cycle de vie passe sous un état cible (STARTED par défaut), puis la reprend lorsqu’il y revient.
import androidx.lifecycle.compose.collectAsStateWithLifecycle
@Composable
fun Screen(vm: MyViewModel) {
val state by vm.uiState
.collectAsStateWithLifecycle()
Text(state.title)
}La dépendance
Elle se trouve dans l’artefact androidx.lifecycle:lifecycle-runtime-compose. Ajoutez-le à votre module afin que l’importation soit résolue.
// build.gradle (module)
implementation(
"androidx.lifecycle:lifecycle-runtime-compose:2.x.x"
)État minimal par défaut : STARTED
Par défaut, la collecte est active tant que le cycle de vie est au moins à l’état STARTED — ce qui signifie que l’écran est visible. Lorsqu’il passe en arrière-plan (sous STARTED), la collecte est suspendue.
Personnaliser l’état minimal
Vous pouvez modifier le seuil avec minActiveState, par exemple pour utiliser RESUMED.
val state by vm.uiState.collectAsStateWithLifecycle(
minActiveState = Lifecycle.State.RESUMED
)Associer StateFlow
Cela fonctionne parfaitement avec le StateFlow que vous exposez depuis un ViewModel. Le flux possède toujours une valeur actuelle ; une nouvelle collecte affiche donc instantanément l’état le plus récent.
private val _uiState = MutableStateFlow(UiState())
val uiState = _uiState.asStateFlow()Pourquoi cela évite du travail
Si votre flux déclenche un calcul coûteux (filtrage d’une grande liste, transformation de flux), suspendre la collecte en arrière-plan signifie que ce travail ne s’exécute tout simplement pas lorsque l’utilisateur est absent.
Associer viewModelScope
Du côté producteur, le ViewModel exécute souvent son pipeline de données dans viewModelScope. Avec stateIn, vous pouvez même arrêter le flux en amont lorsqu’il n’y a plus de collecteurs.
val uiState = repository.stream()
.stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(5000),
initialValue = UiState()
)Explication de WhileSubscribed
WhileSubscribed(5000) maintient le flux en amont actif pendant 5 secondes après le départ du dernier collecteur. Cela évite de redémarrer les opérations lors de brèves modifications de configuration, tout en les arrêtant lorsque l’utilisateur quitte réellement l’écran.
Résumé des bonnes pratiques
Pour les écrans Compose reposant sur un ViewModel :
- Exposez un
StateFlow. - Collectez-le avec
collectAsStateWithLifecycle(). - Utilisez éventuellement
stateIn(WhileSubscribed)en amont.
Vérification rapide
Vérifiez votre compréhension de la collecte tenant compte du cycle de vie.
Récapitulatif
Vous avez appris que :
collectAsStateWithLifecycle()suspend la collecte en arrière-plan.- Le seuil par défaut est STARTED, et peut être ajusté avec
minActiveState. - Associez-le à un
StateFlowet àstateIn(WhileSubscribed)pour obtenir un pipeline efficace.
Questions Fréquemment Posées
La leçon « collectAsStateWithLifecycle » est-elle gratuite ?
Oui — le texte complet de « collectAsStateWithLifecycle » 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 « collectAsStateWithLifecycle » ?
Collectez les flux en toute sécurité avec le cycle de vie. 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 « collectAsStateWithLifecycle » ?
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