Č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ďActivitysa stáva viditeľnou pre používateľa, ale ešte nezískala fokus.onResume(): Volá sa, keďActivityzí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ďActivitystratí 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ďActivityuž 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ž budeActivityzničená. Tu sa uvoľňujú všetky zostávajúce zdroje.onRestart(): Volá sa poonStop()pri opätovnom zobrazeníActivity. NasledujeonStart().
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
}
}