Sobes.tech
Junior

Šta možete da kažete o životnom ciklusu Activity u Androidu?

sobes.tech АИ

Одговор од АИ

Животни циклус Activity је скуп стања и прелаза између њих, кроз које пролази сваки примерак Activity од тренутка креирања до уништења. Он се дефинише скупом callback метода.

Основне callback методе животног циклуса:

  • onCreate(): Позива се при првом креирању Activity. Овде се врши инициализација UI, повезивање података и друге једнократне акције.
  • onStart(): Позива се када Activity постане видљив кориснику, али још није добила фокус.
  • onResume(): Позива се када Activity добије фокус и постане активна. Овде обично почињу анимације и друге интерактивне акције.
  • onPause(): Позива се када Activity изгуби фокус, али још увек је видљива (на пример, полупрозрачно дијалошко окно преко ње). Овде треба зауставити ресурсоемке операције.
  • onStop(): Позива се када Activity више није видљива кориснику. Овде се чувају незапамћени подаци и ослобађају ресурси који више нису потребни.
  • onDestroy(): Позива се пре него што Activity буде уништена. Овде се ослобађају сви преостали ресурси.
  • onRestart(): Позива се након onStop() при поновном приказивању Activity. Следи onStart().

Графички, животни циклус може бити представљен овако:

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

Постоје и прелази:

  • Created -> Started (после onStart())
  • Started -> Resumed (после onResume())
  • Resumed -> Paused (када губи фокус)
  • Paused -> Resumed (када добија фокус назад)
  • Paused -> Stopped (када потпуно нестаје)
  • Stopped -> Destroyed (при завршетку активности)
  • Stopped -> Restarted -> Started (после onRestart())

Важно је правилно управљати стањем Activity у овим callback методама како би се избегли цурења меморије и обезбедило исправно понашање апликације при промени конфигурације или преласку између Activity. За чување стања користи се onSaveInstanceState() (пре onStop()) а опоравак се врши у onCreate() или onRestoreInstanceState() (после onStart()).

Пример коришћења onSaveInstanceState():

// Чување стања
override fun onSaveInstanceState(outState: Bundle) {
    outState.putString("my_data", "some_value")
    super.onSaveInstanceState(outState)
}

// Опоравак стања
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // ...
    if (savedInstanceState != null) {
        val myData = savedInstanceState.getString("my_data")
        // Користити myData
    }
}