Co możesz powiedzieć o cyklu życia Activity w Androidzie?
sobes.tech AI
Odpowiedź od AI
Cykl życia Activity to zbiór stanów i przejść między nimi, przez które przechodzi każda instancja Activity od momentu utworzenia do zniszczenia. Jest on zdefiniowany przez zestaw metod callback.
Główne metody callback cyklu życia:
onCreate(): Wywoływana przy pierwszym utworzeniuActivity. Tu odbywa się inicjalizacja interfejsu użytkownika, powiązanie danych i inne jednorazowe działania.onStart(): Wywoływana, gdyActivitystaje się widoczna dla użytkownika, ale jeszcze nie otrzymała fokusu.onResume(): Wywoływana, gdyActivityotrzymuje fokus i staje się aktywna. Tu zwykle rozpoczynają się animacje i inne działania interaktywne.onPause(): Wywoływana, gdyActivitytraci fokus, ale nadal jest widoczna (np. półprzezroczyste okno dialogowe nad nią). Tu należy zatrzymać operacje zużywające zasoby.onStop(): Wywoływana, gdyActivitynie jest już widoczna dla użytkownika. Tu zapisuje się niezapisane dane i zwalnia zasoby, które nie są już potrzebne.onDestroy(): Wywoływana przed zniszczeniemActivity. Tu zwalnia się wszystkie pozostałe zasoby.onRestart(): Wywoływana poonStop(), gdyActivityjest ponownie wyświetlana. Następuje po niejonStart().
Graficznie cykl życia można przedstawić tak:
Created -> Started -> Resumed -> Paused -> Stopped -> Destroyed
Istnieją także przejścia:
- Created -> Started (po
onStart()) - Started -> Resumed (po
onResume()) - Resumed -> Paused (gdy traci fokus)
- Paused -> Resumed (gdy odzyskuje fokus)
- Paused -> Stopped (gdy jest całkowicie ukryta)
- Stopped -> Destroyed (przy kończeniu aktywności)
- Stopped -> Restarted -> Started (po
onRestart())
Ważne jest poprawne zarządzanie stanem Activity w tych metodach callback, aby uniknąć wycieków pamięci i zapewnić poprawne zachowanie aplikacji przy zmianie konfiguracji lub przełączaniu między Activity. Do zapisywania stanu używa się onSaveInstanceState() (przed onStop()), a odtwarzanie odbywa się w onCreate() lub onRestoreInstanceState() (po onStart()).
Przykład użycia onSaveInstanceState():
// Zapisywanie stanu
override fun onSaveInstanceState(outState: Bundle) {
outState.putString("my_data", "some_value")
super.onSaveInstanceState(outState)
}
// Odtwarzanie stanu
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
if (savedInstanceState != null) {
val myData = savedInstanceState.getString("my_data")
// Użycie myData
}
}