Sobes.tech
Junior

Čo môžete povedať o životnom cykle Activity v Androidu?

sobes.tech AI

Odpoveď od AI

Životný cyklus Activity je súbor stavov a prechodov medzi nimi, ktorými prechádza každý inštancia Activity od momentu vytvorenia až po zničenie. Je definovaný súborom callback metód.

Hlavné callback metódy životného cyklu:

  • onCreate(): Volá sa pri prvom vytvorení Activity. Tu sa vykonáva inicializácia UI, viazanie dát a ďalšie jednorazové akcie.
  • onStart(): Volá sa, keď Activity sa stáva viditeľnou pre používateľa, ale ešte nezískala fokus.
  • onResume(): Volá sa, keď Activity získa fokus a stáva sa aktívnou. Tu sa zvyčajne začínajú animácie a ďalšie interaktívne akcie.
  • onPause(): Volá sa, keď Activity stratí fokus, ale je ešte viditeľná (napríklad, polopriehľadné dialógové okno nad ňou). Tu je potrebné zastaviť náročné operácie.
  • onStop(): Volá sa, keď Activity už nie je viditeľná pre používateľa. Tu sa ukladajú neuložené dáta a uvoľňujú sa zdroje, ktoré už nie sú potrebné.
  • onDestroy(): Volá sa predtým, než bude Activity zničená. Tu sa uvoľňujú všetky zostávajúce zdroje.
  • onRestart(): Volá sa po onStop() pri opätovnom zobrazení Activity. Nasleduje onStart().

Graficky, životný cyklus možno zobraziť takto:

Created -> Started -> Resumed -> Paused -> Stopped -> Destroyed

Existujú aj prechody:

  • Created -> Started (po onStart())
  • Started -> Resumed (po onResume())
  • Resumed -> Paused (keď stratí fokus)
  • Paused -> Resumed (keď získa fokus späť)
  • Paused -> Stopped (keď úplne zmizne)
  • Stopped -> Destroyed (pri ukončení aktivity)
  • Stopped -> Restarted -> Started (po onRestart())

Je dôležité správne spravovať stav Activity v týchto callback metódach, aby sa predišlo únikom pamäte a zabezpečilo správne správanie aplikácie pri zmene konfigurácie alebo prepínaní medzi Activity. Na uloženie stavu sa používa onSaveInstanceState() (pred onStop()) a obnovenie sa vykonáva v onCreate() alebo onRestoreInstanceState() (po onStart()).

Príklad použitia onSaveInstanceState():

// Uloženie stavu
override fun onSaveInstanceState(outState: Bundle) {
    outState.putString("my_data", "some_value")
    super.onSaveInstanceState(outState)
}

// Obnovenie stavu
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // ...
    if (savedInstanceState != null) {
        val myData = savedInstanceState.getString("my_data")
        // Použiť myData
    }
}