Cykl życia Activity.
Activity to ekran w twojej aplikacji. Ale ekrany pojawiają się i znikają. Użytkownicy przechodzą między ekranami, obracają urządzenie, przełączają się między aplikacjami. Android zarządza twoją Activity przez cykl życia. Dziś wyjaśniamy ten cykl i pokazujemy, jak z nim pracować.
Activity reprezentuje jeden ekran.
Gdy użytkownik otwiera twoją aplikację, widzi Activity. Korzysta z jej UI. Każdy ekran aplikacji to zwykle osobna Activity.
Activity są od siebie niezależne. Jedna Activity może uruchomić drugą. Mogą przekazywać sobie dane.
Activity zarządza system. To on je tworzy, niszczy i wstrzymuje. Nie ty decydujesz, kiedy to się dzieje. Decyduje system.
Twoje zadanie to prawidłowa reakcja. Gdy system tworzy twoją Activity, przygotuj UI. Gdy ją niszczy, posprzątaj.
Gdy Activity przechodzi między stanami, Android wywołuje określone metody.
onCreate jest wywoływana przy tworzeniu Activity. Tu inicjalizujesz UI. Ta metoda jest wywoływana tylko raz na instancję.
onStart jest wywoływana, gdy Activity staje się widoczna. Nie przyjmuje jeszcze interakcji, ale już jest widoczna.
onResume jest wywoływana, gdy Activity zaczyna przyjmować interakcję z użytkownikiem. Jest w pełni widoczna i aktywna.
onPause jest wywoływana, gdy Activity traci fokus. Nadchodzi inna Activity. Ta wciąż jest widoczna, ale nie przyjmuje interakcji.
onStop jest wywoływana, gdy Activity przestaje być widoczna. Inny ekran całkowicie ją zasłania.
onDestroy jest wywoływana, gdy Activity kończy działanie. Zwolnij tu zasoby.
Cykl życia przechodzi przez kolejne stany.
Uruchomienie: onCreate, onStart, onResume. Activity staje się w pełni aktywna.
Przejście do innego ekranu: onPause, onStop. Activity trafia do tła.
Powrót: onRestart, onStart, onResume. Activity wraca na pierwszy plan.
Zakończenie: onPause, onStop, onDestroy. Activity kończy działanie.
Każde przejście wywołuje callbacki. Twój kod uruchamia się w odpowiedzi na nie.
Nie wszystkie przejścia przebiegają gładko. System może zabić twoją Activity. Musisz obsłużyć nieoczekiwane zniszczenie.
onCreate: ustaw content view, zainicjalizuj komponenty UI, przywróć zapisany stan. To twoja konfiguracja początkowa.
onStart: uruchom operacje, które mają działać, gdy Activity jest widoczna. Zarejestruj listenery.
onResume: uruchom operacje, które mają działać, gdy Activity jest aktywna. Wznów animacje, przejmij zasoby na wyłączność, na przykład kamerę.
onPause: zwolnij zasoby używane na wyłączność. Wstrzymaj animacje. Zapisz lekki stan. Ta metoda musi działać szybko.
onStop: zapisz trwały stan. Zwolnij zasoby, które nie są potrzebne, gdy Activity jest niewidoczna.
onDestroy: zwolnij wszystkie zasoby. Wyrejestruj wszystkie listenery. To twoje ostatnie sprzątanie.
Przy zmianie konfiguracji Activity jest niszczona i tworzona od nowa.
Obrót urządzenia: zmiana konfiguracji. Zmiana języka: zmiana konfiguracji. Przełączenie trybu ciemnego: zmiana konfiguracji.
System niszczy Activity, a potem tworzy nową. Twoja Activity musi to obsłużyć.
onCreate jest wywoływana ponownie. UI musi zostać zainicjalizowany od nowa. Ale stan użytkownika chcesz zachować.
Dlatego zapisywanie stanu ma znaczenie. Użytkownik wypełniał formularz. Obrót ekranu nie może skasować tego, co wpisał.
onSaveInstanceState pozwala zapisać stan przed zniszczeniem Activity.
override fun onSaveInstanceState(outState: Bundle). Umieść wartości w Bundle: outState.putString(key, value).
Przy ponownym tworzeniu Activity system przekazuje ten Bundle do onCreate. Przy pierwszym utworzeniu savedInstanceState ma wartość null, a przy ponownym nie jest null.
W onCreate sprawdź, czy savedInstanceState nie jest null. Jeśli nie jest, przywróć stan.
Zapisany stan musi być mały. Zapisuj tylko to, co jest potrzebne, żeby odtworzyć doświadczenie użytkownika. Duże dane trzymaj w ViewModel albo w bazie danych.
Stan możesz przywrócić w onCreate albo w onRestoreInstanceState.
onCreate: jeśli savedInstanceState nie jest null, przywróć wartości.
onRestoreInstanceState jest wywoływana po onStart i tylko wtedy, gdy jest stan do przywrócenia.
Oba podejścia działają. Wybierz to, które pasuje do twoich potrzeb. Większość developerów korzysta z onCreate.
W komponentach UI takich jak EditText system sam zapisuje i przywraca tekst. Wystarczy nadać widokowi ID.
Własny stan zapisujesz i przywracasz ręcznie.
Nowoczesny Android udostępnia komponenty świadome cyklu życia (lifecycle-aware).
LifecycleOwner i LifecycleObserver pozwalają komponentom automatycznie reagować na zdarzenia cyklu życia.
ViewModel przetrwa zmianę konfiguracji. Przechowuje stan UI przy kolejnych obrotach ekranu.
LiveData jest lifecycle-aware: aktualizuje tylko aktywnych obserwatorów. StateFlow nie jest; zbieraj go przez repeatOnLifecycle lub collectAsStateWithLifecycle.
Te narzędzia ograniczają ręczne zarządzanie cyklem życia. Mniej kodu w callbackach. Mniej błędów.
Przyjrzymy się im w kolejnych filmach.
Podsumujmy.
Activity to ekrany z cyklem życia, którym zarządza system.
Callbacki cyklu życia pozwalają reagować na zmiany stanu: onCreate, onStart, onResume, onPause, onStop, onDestroy.
Zmiana konfiguracji niszczy Activity i tworzy ją od nowa.
Zapisuj stan w onSaveInstanceState. Przywracaj go w onCreate albo w onRestoreInstanceState.
Używaj komponentów lifecycle-aware, żeby uprościć zarządzanie cyklem życia.
Szanuj cykl życia. Inicjalizuj we właściwym momencie. Sprzątaj we właściwym momencie.