Android Academy · Lekcja

StateFlow i SharedFlow

Udostępniaj stan reaktywny z aplikacji

Lekcja 4 z 413 kroki

StateFlow i SharedFlow 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.

Gorące przepływy

W przeciwieństwie do zimnych przepływów, StateFlow i SharedFlow są gorące: istnieją niezależnie od odbiorców i mogą być współdzielone przez wielu odbiorców.

StateFlow przechowuje stan

StateFlow zawsze przechowuje jedną bieżącą wartość. Nowi odbiorcy natychmiast otrzymują tę najnowszą wartość. Doskonale nadaje się do przechowywania stanu interfejsu.

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

Aktualizowanie StateFlow

Ustawiaj bezpośrednio właściwość .value lub używaj update do atomowej operacji odczytu, modyfikacji i zapisu.

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

StateFlow scala i usuwa duplikaty

StateFlow przechowuje tylko najnowszą wartość (scala wartości) i nie emituje nowej, jeśli jest ona równa poprzedniej. Zapobiega to zbędnym aktualizacjom interfejsu.

SharedFlow do zdarzeń

SharedFlow nie wymaga bieżącej wartości i może odtwarzać skonfigurowaną liczbę wcześniejszych emisji. Nadaje się do jednorazowych zdarzeń, takich jak nawigacja lub wyświetlenie paska Snackbar.

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

Emitowanie zdarzeń

Emituj wartości do SharedFlow z poziomu korutyny.

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

Dlaczego nie używać StateFlow do zdarzeń

StateFlow przechowuje ostatnią wartość, więc odbiorca, który zasubskrybuje strumień ponownie (po obrocie ekranu), otrzyma stare zdarzenie jeszcze raz i może na przykład wykonać nawigację dwukrotnie. SharedFlow domyślnie nie odtwarza wcześniejszych emisji.

Konfigurowanie SharedFlow

Dostosuj replay i extraBufferCapacity, aby kontrolować buforowanie i zachowanie związane z back-pressure.

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

Konwertowanie zimnego Flow na StateFlow

Użyj stateIn, aby przekształcić zimny strumień źródłowy we współdzielony StateFlow powiązany z zakresem ViewModelu.

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

Wybór między nimi

  • StateFlow → bieżący stan ekranu (zawsze ma wartość).
  • SharedFlow → przejściowe zdarzenia (wykonywane raz).

Zbieranie obu typów

Zbieraj StateFlow w Compose za pomocą collectAsStateWithLifecycle; zdarzenia SharedFlow zbieraj wewnątrz LaunchedEffect, aby obsłużyć je tylko raz.

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

Szybki sprawdzian

Sprawdź swoją wiedzę na temat StateFlow i SharedFlow.

Podsumowanie

Dowiedziałeś się, że:

  • StateFlow to gorący, scalający się nośnik stanu z bieżącą wartością.
  • SharedFlow to gorący strumień zdarzeń z konfigurowalnym mechanizmem replay.
  • StateFlow służy do przechowywania stanu, a SharedFlow do zdarzeń jednorazowych.
  • stateIn konwertuje zimne przepływy na StateFlow.
Bezpłatny start

Ucz się Kotlin dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
36
Lekcje
152

Często zadawane pytania

Czy lekcja „StateFlow i SharedFlow” jest bezpłatna?

Tak — pełny tekst „StateFlow i SharedFlow” 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 „StateFlow i SharedFlow”?

Udostępniaj stan reaktywny z aplikacji Ć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 „StateFlow i SharedFlow”?

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. Podstawy korutyn i zakresów
  2. viewModelScope i Dispatchers
  3. Podstawy Kotlin Flow
  4. StateFlow i SharedFlow
← Powrót do Android Academy