0Pricing
Android Academy · Lekcja

Dlaczego warto używać ViewModel?

Sprawnie zachowuj stan podczas zmian konfiguracji

Dlaczego warto używać ViewModel? to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 1 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.

Czym jest ViewModel?

ViewModel to komponent architektury Androida zaprojektowany do przechowywania i zarządzania danymi związanymi z interfejsem w sposób uwzględniający cykl życia.

Przetrwa zmiany konfiguracji, takie jak obrót ekranu, dzięki czemu dane nie zostaną zniszczone i utworzone ponownie za każdym razem, gdy system odbuduje interfejs.

Problem zmian konfiguracji

Po obróceniu urządzenia Android niszczy i ponownie tworzy obiekt Activity. Cały stan przechowywany w obiekcie Activity lub Composable zostaje utracony.

  • Licznik zostaje wyzerowany.
  • Załadowana lista znika.
  • Żądanie sieciowe może zostać uruchomione ponownie.

ViewModel rozwiązuje ten problem, ponieważ działa poza cyklem życia instancji Activity.

Jak ViewModel przetrwa

Platforma utrzymuje tę samą instancję ViewModel przy życiu podczas ponownego tworzenia komponentów. Po utworzeniu nowego obiektu Activity otrzymuje on istniejący ViewModel, a nie nową instancję.

class CounterViewModel : ViewModel() {
    var count = 0
        private set

    fun increment() {
        count++
    }
}

Pobieranie ViewModel w Compose

W Jetpack Compose ViewModel zwykle pobiera się za pomocą pomocniczej funkcji viewModel(). Zwraca ona tę samą instancję dla właściciela cyklu życia.

import androidx.lifecycle.viewmodel.compose.viewModel

@Composable
fun CounterScreen(
    vm: CounterViewModel = viewModel()
) {
    Text("Count: " + vm.count)
}

Rozdzielenie odpowiedzialności

ViewModel pomaga zachować przejrzysty podział:

  • Warstwa interfejsu (Composable/Activity) tylko wyświetla stan i przekazuje zdarzenia.
  • ViewModel przechowuje stan i logikę biznesową.

Dzięki temu interfejs jest prostszy, a logikę łatwiej testować.

Zakres i właściciel ViewModel

ViewModel ma zakres wyznaczony przez ViewModelStoreOwner, którym zwykle jest Activity, Fragment lub wpis stosu powrotu nawigacji.

Jest automatycznie czyszczony, gdy ten właściciel zostanie trwale zniszczony, na przykład gdy użytkownik zamknie Activity przyciskiem Wstecz.

Funkcja zwrotna onCleared

Gdy ViewModel zostanie ostatecznie zniszczony, platforma wywołuje onCleared(). Użyj tej funkcji, aby zwolnić otwarte zasoby.

class MyViewModel : ViewModel() {
    override fun onCleared() {
        super.onCleared()
        // cancel jobs, close listeners
    }
}

Czego NIE umieszczać w ViewModel

Nigdy nie przechowuj w ViewModel odwołań do Views, Activities ani żadnego obiektu Context powiązanego z interfejsem. Ponieważ ViewModel żyje dłużej niż Activity, prowadzi to do wycieków pamięci.

Jeśli potrzebujesz kontekstu aplikacji, użyj zamiast tego AndroidViewModel.

AndroidViewModel dla kontekstu aplikacji

Gdy rzeczywiście potrzebujesz obiektu Context, rozszerz klasę AndroidViewModel, która bezpiecznie udostępnia długowieczny kontekst aplikacji.

class PrefsViewModel(
    app: Application
) : AndroidViewModel(app) {
    private val context = getApplication<Application>()
}

Przekazywanie argumentów konstruktora

Aby wstrzykiwać zależności (takie jak repozytorium) do ViewModel, użyj ViewModelFactory lub frameworka DI, takiego jak Hilt. Hilt omówimy później w tej ścieżce.

class UserViewModel(
    private val repo: UserRepository
) : ViewModel() {
    // repo provided via a factory or Hilt
}

Dlaczego ViewModel ma znaczenie

ViewModel jest jednym z fundamentów nowoczesnej architektury Androida. Zapewnia:

  • Przetrwanie zmian konfiguracji.
  • Przejrzysty podział między interfejsem a logiką.
  • Przewidywalne zarządzanie stanem, które można testować.

Szybkie sprawdzenie

Sprawdź, czy rozumiesz, dlaczego używa się ViewModel.

Podsumowanie

Nauczyłeś się, że:

  • ViewModel przechowuje stan interfejsu i przetrwa zmiany konfiguracji.
  • Nigdy nie może przechowywać odwołań do View ani Activity, aby uniknąć wycieków.
  • Ma zakres wyznaczony przez właściciela i jest czyszczony za pomocą onCleared().
  • AndroidViewModel udostępnia bezpieczny Context aplikacji.

Często zadawane pytania

Czy lekcja „Dlaczego warto używać ViewModel?” jest bezpłatna?

Tak — pełny tekst „Dlaczego warto używać ViewModel?” 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 „Dlaczego warto używać ViewModel?”?

Sprawnie zachowuj stan podczas zmian konfiguracji Ć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 1 z 4.

Ile czasu zajmuje lekcja „Dlaczego warto używać ViewModel?”?

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