Ką galite papasakoti apie Android Activity gyvavimo ciklą?
sobes.tech AI
Atsakymas iš AI
Gyvenimo ciklas Activity yra rinkinio būsenų ir jų tarpusavio perėjimų rinkinys, per kurį eina kiekvienas Activity egzempliorius nuo sukūrimo momento iki sunaikinimo. Jis apibrėžiamas grįžtamojo kvietimo metodų rinkiniu.
Pagrindiniai grįžtamojo kvietimo metodai gyvavimo cikle:
onCreate(): kviečiamas, kaiActivitypirmą kartą sukuriama. Čia vykdoma UI inicializacija, duomenų susiejimas ir kitos vienkartinės operacijos.onStart(): kviečiamas, kaiActivitytampa matoma vartotojui, bet dar nėra gautas dėmesys.onResume(): kviečiamas, kaiActivitygauna dėmesį ir tampa aktyvi. Čia dažnai pradedamos animacijos ir kitos interaktyvios veiklos.onPause(): kviečiamas, kaiActivitypraranda dėmesį, bet dar matoma (pavyzdžiui, pusiau permatomas dialogo langas viršuje). Čia reikėtų sustabdyti išteklius reikalaujančias operacijas.onStop(): kviečiamas, kaiActivitynebėra matoma vartotojui. Čia išsaugomi neišsaugoti duomenys ir atlaisvinami nereikalingi ištekliai.onDestroy(): kviečiamas priešActivitysunaikinimą. Čia atlaisvinami visi likę ištekliai.onRestart(): kviečiamas poonStop(), kaiActivityvėl rodomas. Po to sekaonStart().
Grafinis gyvavimo ciklas atrodo taip:
Created -> Started -> Resumed -> Paused -> Stopped -> Destroyed
Taip pat yra perėjimai:
- Created -> Started (po
onStart()) - Started -> Resumed (po
onResume()) - Resumed -> Paused (kai praranda dėmesį)
- Paused -> Resumed (kai vėl gauna dėmesį)
- Paused -> Stopped (kai visiškai paslepia)
- Stopped -> Destroyed (kai užbaigiama veikla)
- Stopped -> Restarted -> Started (po
onRestart())
Svarbu teisingai valdyti Activity būseną šiuose grįžtamuosiuose kvietimo metoduose, kad išvengtumėte atminties nutekėjimo ir užtikrintumėte teisingą programos elgesį keičiant konfigūraciją ar perjungiant tarp Activity. Būsenos išsaugojimui naudojama onSaveInstanceState() (prieš onStop()), o atstatymas vyksta onCreate() arba onRestoreInstanceState() (po onStart()).
onSaveInstanceState() pavyzdys:
// Būsenos išsaugojimas
override fun onSaveInstanceState(outState: Bundle) {
outState.putString("my_data", "some_value")
super.onSaveInstanceState(outState)
}
// Būsenos atstatymas
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
if (savedInstanceState != null) {
val myData = savedInstanceState.getString("my_data")
// Naudoti myData
}
}