collectAsStateWithLifecycle
Indsaml flows sikkert med livscyklussen.
collectAsStateWithLifecycle er en gratis Android Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Android Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Android Academy-kurset indeholder 4 lektioner i alt.
Sikker indsamling af flows
Når en Composable samler et flow, bør den helst stoppe med at samle, mens skærmen er i baggrunden, og genoptage indsamlingen, når den vender tilbage.
Værktøjet til dette er collectAsStateWithLifecycle().
Problemet med collectAsState
Almindelig collectAsState() bliver ved med at samle, så længe Composable-funktionen er i kompositionen — også når appen er i baggrunden.
Det kan spilde ressourcer og behandle opdateringer, som brugeren ikke kan se.
Introduktion til collectAsStateWithLifecycle
Denne livscyklusbevidste samler sætter indsamlingen på pause, når livscyklussen falder under en måltilstand (STARTED som standard), og genoptager den, når livscyklussen vender tilbage.
import androidx.lifecycle.compose.collectAsStateWithLifecycle
@Composable
fun Screen(vm: MyViewModel) {
val state by vm.uiState
.collectAsStateWithLifecycle()
Text(state.title)
}Afhængigheden
Den findes i artefaktet androidx.lifecycle:lifecycle-runtime-compose. Føj det til dit modul, så importen kan løses.
// build.gradle (module)
implementation(
"androidx.lifecycle:lifecycle-runtime-compose:2.x.x"
)Standardminimumtilstand: STARTED
Som standard er indsamlingen aktiv, mens livscyklussen mindst er STARTED — det betyder, at skærmen er synlig. Når den går i baggrunden (under STARTED), sættes indsamlingen på pause.
Tilpasning af minimumtilstanden
Du kan ændre tærsklen med minActiveState, for eksempel til RESUMED.
val state by vm.uiState.collectAsStateWithLifecycle(
minActiveState = Lifecycle.State.RESUMED
)Kombination med StateFlow
Dette fungerer perfekt sammen med det StateFlow, du eksponerer fra en ViewModel. Flowet har altid en aktuel værdi, så ny indsamling viser straks den seneste tilstand.
private val _uiState = MutableStateFlow(UiState())
val uiState = _uiState.asStateFlow()Hvorfor det sparer arbejde
Hvis dit flow driver beregninger, der kræver mange ressourcer (filtrering af en stor liste eller transformation af streams), betyder det at sætte indsamlingen på pause i baggrunden, at arbejdet ganske enkelt ikke udføres, mens brugeren er væk.
Kombination med viewModelScope
På producentens side kører ViewModel ofte sin datapipeline i viewModelScope. Med stateIn kan du endda få upstream-flowet til at stoppe, når der ikke er nogen samlere.
val uiState = repository.stream()
.stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(5000),
initialValue = UiState()
)Forklaring af WhileSubscribed
WhileSubscribed(5000) holder upstream-flowet aktivt i 5 sekunder, efter at den sidste samler forlader det. Det undgår, at arbejdet genstartes under korte konfigurationsændringer, samtidig med at det stadig stoppes, når brugeren reelt forlader skærmen.
Opsummering af bedste praksis
For Compose-skærme, der er baseret på en ViewModel:
- Eksponér et
StateFlow. - Saml med
collectAsStateWithLifecycle(). - Brug eventuelt
stateIn(WhileSubscribed)i upstream-flowet.
Hurtigt tjek
Test din forståelse af livscyklusbevidst indsamling.
Opsummering
Du har lært:
collectAsStateWithLifecycle()sætter indsamlingen på pause i baggrunden.- Standardtærsklen er STARTED og kan ændres via
minActiveState. - Kombinér det med et
StateFlowogstateIn(WhileSubscribed)for en effektiv datapipeline.
Lær Kotlin med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 36
- Lektioner
- 152
Ofte stillede spørgsmål
Er lektionen “collectAsStateWithLifecycle” gratis?
Ja — alle 3 lektioner i læringssporet Android Academy, inklusive “collectAsStateWithLifecycle”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Android Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “collectAsStateWithLifecycle”?
Indsaml flows sikkert med livscyklussen. Du øver dig i Android Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Android Academy?
Der kræves ingen tidligere erfaring. Android Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “collectAsStateWithLifecycle”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Android Academy-lektion?
Ja. Alle Android Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Hvorfor bruge en ViewModel?
- Eksponering af state fra ViewModel
- Android-livscyklussen
- collectAsStateWithLifecycle