Sobes.tech
Junior

Какво можете да разкажете за жизнения цикъл на Activity в Android?

sobes.tech AI

Отговор от AI

Цикълът на живот на 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
    }
}