0Pricing
Android Academy · Lekcja

collectAsStateWithLifecycle

Bezpiecznie zbieraj przepływy danych zgodnie z cyklem życia

collectAsStateWithLifecycle to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Android Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Android Academy zawiera 4 lekcji w sumie.

Bezpieczne gromadzenie danych z przepływów

Gdy kompozytor gromadzi dane z przepływu, powinien najlepiej przestać je gromadzić, gdy ekran działa w tle, i wznowić tę czynność po powrocie.

Służy do tego collectAsStateWithLifecycle().

Problem z collectAsState

Zwykłe collectAsState() gromadzi dane tak długo, jak długo kompozytor znajduje się w kompozycji — nawet gdy aplikacja działa w tle.

Może to marnować zasoby i przetwarzać aktualizacje, których użytkownik nie widzi.

Poznaj collectAsStateWithLifecycle

Ten kolektor uwzględniający cykl życia wstrzymuje gromadzenie danych, gdy cykl życia spadnie poniżej docelowego stanu (domyślnie STARTED), i wznawia je po powrocie do tego stanu.

import androidx.lifecycle.compose.collectAsStateWithLifecycle

@Composable
fun Screen(vm: MyViewModel) {
    val state by vm.uiState
        .collectAsStateWithLifecycle()
    Text(state.title)
}

Zależność

Znajduje się ona w artefakcie androidx.lifecycle:lifecycle-runtime-compose. Dodaj go do modułu, aby import działał poprawnie.

// build.gradle (module)
implementation(
  "androidx.lifecycle:lifecycle-runtime-compose:2.x.x"
)

Domyślny stan minimalny: STARTED

Domyślnie gromadzenie danych jest aktywne, gdy cykl życia jest co najmniej w stanie STARTED — czyli gdy ekran jest widoczny. Po przejściu aplikacji do tła (poniżej STARTED) gromadzenie zostaje wstrzymane.

Dostosowywanie stanu minimalnego

Próg można zmienić za pomocą minActiveState, na przykład na RESUMED.

val state by vm.uiState.collectAsStateWithLifecycle(
    minActiveState = Lifecycle.State.RESUMED
)

Połączenie z StateFlow

To rozwiązanie doskonale współpracuje z StateFlow udostępnianym przez ViewModel. Przepływ zawsze ma bieżącą wartość, więc ponowne rozpoczęcie gromadzenia natychmiast pokazuje najnowszy stan.

private val _uiState = MutableStateFlow(UiState())
val uiState = _uiState.asStateFlow()

Dlaczego oszczędza to pracę

Jeśli przepływ napędza kosztowne obliczenia (filtrowanie dużej listy, przekształcanie strumieni), wstrzymanie gromadzenia danych w tle oznacza, że praca ta po prostu nie jest wykonywana podczas nieobecności użytkownika.

Połączenie z viewModelScope

Po stronie producenta ViewModel często uruchamia potok danych w viewModelScope. Za pomocą stateIn można nawet sprawić, że źródłowy przepływ zatrzyma się, gdy nie będzie żadnych kolektorów.

val uiState = repository.stream()
    .stateIn(
        scope = viewModelScope,
        started = SharingStarted.WhileSubscribed(5000),
        initialValue = UiState()
    )

Wyjaśnienie WhileSubscribed

WhileSubscribed(5000) utrzymuje źródłowy przepływ aktywny przez 5 sekund po odejściu ostatniego kolektora. Zapobiega to ponownemu uruchamianiu pracy podczas krótkich zmian konfiguracji, a jednocześnie zatrzymuje ją, gdy użytkownik rzeczywiście opuszcza ekran.

Podsumowanie dobrych praktyk

W przypadku ekranów Compose opartych na ViewModel:

  • Udostępniaj StateFlow.
  • Gromadź dane za pomocą collectAsStateWithLifecycle().
  • Opcjonalnie używaj źródłowego stateIn(WhileSubscribed).

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat gromadzenia danych z uwzględnieniem cyklu życia.

Podsumowanie

Nauczyłeś się:

  • collectAsStateWithLifecycle() wstrzymuje gromadzenie danych w tle.
  • Domyślnym progiem jest STARTED, który można zmienić za pomocą minActiveState.
  • Połącz je z StateFlow i stateIn(WhileSubscribed), aby utworzyć wydajny potok.

Często zadawane pytania

Czy lekcja „collectAsStateWithLifecycle” jest bezpłatna?

Tak — pełny tekst „collectAsStateWithLifecycle” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Android Academy, przejdź na CoddyKit PRO. Kurs Android Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „collectAsStateWithLifecycle”?

Bezpiecznie zbieraj przepływy danych zgodnie z cyklem życia Ćwiczysz Android Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Android Academy?

Nie wymagamy żadnego doświadczenia. Android Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „collectAsStateWithLifecycle”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Android Academy?

Tak. Każda lekcja Android Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Dlaczego warto używać ViewModel?
  2. Udostępnianie stanu z ViewModel
  3. Cykl życia Androida
  4. collectAsStateWithLifecycle
← Powrót do Android Academy