Android Academy · Les

StateFlow en SharedFlow

Maak reactieve state beschikbaar vanuit uw app.

Les 4 van 413 stappen

StateFlow en SharedFlow is een gratis Android Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Android Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Android Academy bevat in totaal 4 lessen.

Hete flows

In tegenstelling tot koude flows zijn StateFlow en SharedFlow heet: ze bestaan onafhankelijk van verzamelaars en kunnen met meerdere verzamelaars worden gedeeld.

StateFlow bevat een status

Een StateFlow bevat altijd één huidige waarde. Nieuwe verzamelaars ontvangen onmiddellijk de nieuwste waarde. Het is ideaal voor de status van de gebruikersinterface.

private val _count = MutableStateFlow(0)
val count: StateFlow<Int> = _count.asStateFlow()

StateFlow bijwerken

Stel .value rechtstreeks in of gebruik update voor een atomaire lees-bewerk-schrijfbewerking.

_count.value++
// or, atomically:
_count.update { it + 1 }

StateFlow voegt waarden samen en verwijdert duplicaten

StateFlow bewaart alleen de nieuwste waarde (samenvoeging) en stuurt geen nieuwe waarde uit als die gelijk is aan de oude. Zo voorkom je overbodige updates van de gebruikersinterface.

SharedFlow voor gebeurtenissen

Een SharedFlow heeft geen verplichte huidige waarde en kan een instelbaar aantal eerdere waarden opnieuw afspelen. Het is geschikt voor eenmalige gebeurtenissen, zoals navigeren of een snackbar tonen.

private val _events = MutableSharedFlow<String>()
val events: SharedFlow<String> = _events.asSharedFlow()

Gebeurtenissen uitsturen

Stuur vanuit een coroutine een gebeurtenis naar een SharedFlow.

fun onSave() {
    viewModelScope.launch {
        _events.emit("Saved!")
    }
}

Waarom geen StateFlow voor gebeurtenissen

StateFlow bewaart de laatste waarde. Een verzamelaar die zich opnieuw abonneert (bijvoorbeeld na een rotatie) zou de oude gebeurtenis dus opnieuw ontvangen en bijvoorbeeld twee keer navigeren. SharedFlow speelt waarden standaard niet opnieuw af.

SharedFlow configureren

Stem replay en extraBufferCapacity af om buffering en gedrag bij te hoge invoersnelheid te regelen.

MutableSharedFlow<String>(
    replay = 0,
    extraBufferCapacity = 1
)

Een koude Flow naar StateFlow converteren

Gebruik stateIn om een koude bovenliggende stroom om te zetten in een gedeelde StateFlow met de ViewModel als bereik.

val uiState = repo.stream()
    .stateIn(
        viewModelScope,
        SharingStarted.WhileSubscribed(5000),
        UiState()
    )

Kiezen tussen beide

  • StateFlow → huidige status van het scherm (heeft altijd een waarde).
  • SharedFlow → tijdelijke gebeurtenissen (één keer uitvoeren).

Beide verzamelen

Verzamel StateFlow in Compose met collectAsStateWithLifecycle; verzamel SharedFlow-gebeurtenissen binnen een LaunchedEffect om ze één keer af te handelen.

LaunchedEffect(Unit) {
    vm.events.collect { msg -> showSnackbar(msg) }
}

Korte controle

Controleer je begrip van StateFlow en SharedFlow.

Samenvatting

Je hebt geleerd:

  • StateFlow is een hot statehouder met conflatie en een huidige waarde.
  • SharedFlow is een hot eventstream met instelbare replay.
  • Gebruik StateFlow voor toestand en SharedFlow voor eenmalige gebeurtenissen.
  • stateIn zet koude flows om in StateFlow.
Gratis beginnen

Leer Kotlin met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
36
Lessen
152

Veelgestelde vragen

Is de les “StateFlow en SharedFlow” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Android Academy, waaronder “StateFlow en SharedFlow”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Android Academy bevat in totaal 4 lessen.

Wat leer ik in “StateFlow en SharedFlow”?

Maak reactieve state beschikbaar vanuit uw app. Je oefent met Android Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Android Academy te beginnen?

Ervaring vooraf is niet nodig. Android Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “StateFlow en SharedFlow”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Android Academy?

Ja. Elke les over Android Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. De basis van coroutines en scopes
  2. viewModelScope en Dispatchers
  3. De basis van Kotlin Flow
  4. StateFlow en SharedFlow
← Terug naar Android Academy