Sobes.tech
Junior

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 utworzeniu Activity. Tu odbywa się inicjalizacja interfejsu użytkownika, powiązanie danych i inne jednorazowe działania.
  • onStart(): Wywoływana, gdy Activity staje się widoczna dla użytkownika, ale jeszcze nie otrzymała fokusu.
  • onResume(): Wywoływana, gdy Activity otrzymuje fokus i staje się aktywna. Tu zwykle rozpoczynają się animacje i inne działania interaktywne.
  • onPause(): Wywoływana, gdy Activity traci fokus, ale nadal jest widoczna (np. półprzezroczyste okno dialogowe nad nią). Tu należy zatrzymać operacje zużywające zasoby.
  • onStop(): Wywoływana, gdy Activity nie jest już widoczna dla użytkownika. Tu zapisuje się niezapisane dane i zwalnia zasoby, które nie są już potrzebne.
  • onDestroy(): Wywoływana przed zniszczeniem Activity. Tu zwalnia się wszystkie pozostałe zasoby.
  • onRestart(): Wywoływana po onStop(), gdy Activity jest ponownie wyświetlana. Następuje po niej onStart().

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
    }
}