Sobes.tech
Junior

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, kai Activity pirmą kartą sukuriama. Čia vykdoma UI inicializacija, duomenų susiejimas ir kitos vienkartinės operacijos.
  • onStart(): kviečiamas, kai Activity tampa matoma vartotojui, bet dar nėra gautas dėmesys.
  • onResume(): kviečiamas, kai Activity gauna dėmesį ir tampa aktyvi. Čia dažnai pradedamos animacijos ir kitos interaktyvios veiklos.
  • onPause(): kviečiamas, kai Activity praranda 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, kai Activity nebėra matoma vartotojui. Čia išsaugomi neišsaugoti duomenys ir atlaisvinami nereikalingi ištekliai.
  • onDestroy(): kviečiamas prieš Activity sunaikinimą. Čia atlaisvinami visi likę ištekliai.
  • onRestart(): kviečiamas po onStop(), kai Activity vėl rodomas. Po to seka onStart().

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