Activity — що це, екран додатку в Android та його Lifecycle

Автор: IT Sectr Опубліковано: 2026-02-22 Час читання: 7 хв

Activity — базовий компонент Android-додатку, що представляє один екран з користувацьким інтерфейсом. Система керує екранами через строгий життєвий цикл — колбеки onCreate, onResume та onDestroy. Кожна Activity оголошується в AndroidManifest.xml та запускається через Intent. Детальніше про історію Android читайте в офіційній документації Google.

Головне

  • Activity — компонент Android, що представляє один екран з UI. Керується через Lifecycle
  • Життєвий цикл включає 6 колбеків: onCreate, onStart, onResume, onPause, onStop, onDestroy
  • Intent — механізм запуску Activity та передачі даних між екранами
  • Manifest — обов'язкова реєстрація кожної Activity в AndroidManifest.xml
  • ViewModel — компонент Jetpack для збереження даних при перестворенні Activity

Що таке Activity?

Activity — ключовий компонент Android-додатку, що надає вікно для взаємодії з користувачем. Кожна Activity керує окремим екраном: список завдань, форма входу, перегляд фото. Система Android створює Activity при запиті та знищує, коли пам'ять потрібна іншим додаткам.

Activity вперше з'явилася в Android 1.0 (2008) і залишається основним будівельним блоком інтерфейсу. За даними Google (2026), 98% додатків у Google Play містять хоча б одну Activity. У сучасній архітектурі Google рекомендує одну Activity з багатьма Fragment, однак класичний багатоекранний додаток залишається поширеною практикою.

Activity stack (back stack) — стек завдань, який зберігає історію переходів. Коли користувач натискає «Назад», поточна Activity знищується та відновлюється попередня. Система керує стеком автоматично, але розробник може контролювати поведінку через launchMode та прапорці Intent.

Життєвий цикл Activity

Життєвий цикл Activity — набір станів та колбеків, через які екран проходить від створення до знищення. Розуміння Lifecycle критично важливе: неправильна робота зі станами призводить до витоків пам'яті, втрати даних та вильотів додатку.

Система Android викликає колбеки в строгому порядку. Розробник перевизначає потрібні методи, щоб ініціалізувати ресурси, зберігати дані та звільняти пам'ять. Кожному колбеку відповідає пара: onCreate ↔ onDestroy, onStart ↔ onStop, onResume ↔ onPause.

КолбекПризначенняДія розробника
onCreateВикликається при створенні ActivityІніціалізація UI, підписка на ViewModel
onStartActivity стає видимоюЗапуск анімацій, камери, GPS
onResumeActivity отримує фокус введенняВідновлення відео, таймерів
onPauseActivity втрачає фокусЗбереження чернеток, зупинка анімацій
onStopActivity прихована іншим екраномЗвільнення важких ресурсів
onDestroyActivity знищуєтьсяОчищення підписок, Closeable

Стани Activity

Розрізняють чотири стани Activity: Running (onResume активний), Paused (видима, але без фокусу), Stopped (не видима), Destroyed (знищена). Система може вбити Activity у стані Stopped при нестачі пам'яті — дані необхідно зберегти в onSaveInstanceState.

Методи життєвого циклу: onCreate, onStart, onResume

Розглянемо три ключові методи життєвого циклу Activity з прикладом на Kotlin. onCreate — точка входу, викликається один раз. Тут відбувається зв'язування layout через setContentView, ініціалізація RecyclerView, підписка на LiveData. onStart — Activity стає видимою для користувача. onResume — Activity отримує фокус і готова до взаємодії.

kotlin
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val recyclerView = findViewById<RecyclerView>(R.id.rv_items)
        recyclerView.layoutManager = LinearLayoutManager(this)
        loadItems()
    }

    override fun onStart() {
        super.onStart()
        startLocationUpdates()
    }

    override fun onResume() {
        super.onResume()
        resumeVideoPlayer()
    }
}

У прикладі onCreate ініціалізує RecyclerView та завантажує дані. onStart запускає оновлення геолокації — ресурс, який повинен працювати тільки коли екран видимий. onResume відновлює відео, зупинене в onPause. Такий розподіл запобігає зайвій роботі у фоні.

Оголошення Activity в AndroidManifest.xml

Кожна Activity повинна бути оголошена у файлі AndroidManifest.xml. Без реєстрації система не знайде екран і викине виняток ActivityNotFoundException. У маніфесті задаються ім'я класу, тема, орієнтація, launchMode та фільтри Intent.

xml
<application
    android:allowBackup="true"
    android:label="@string/app_name"
    android:theme="@style/Theme.MyApp">

    <activity
        android:name=".MainActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".DetailActivity"
        android:parentActivityName=".MainActivity" />
</application>

Прапорець exported визначає, чи можуть інші додатки запускати Activity. Для головного екрану exported=true, для внутрішніх екранів — false. Атрибут parentActivityName включає стандартну навігацію «Вгору» (Up Navigation).

Запуск Activity через Intent

Intent — об'єкт, що описує дію, яку потрібно виконати. У контексті Activity Intent використовується для запуску іншого екрану з передачею даних. Intent буває явним (вказує конкретний клас) та неявним (вказує дію, система підбирає відповідний компонент).

kotlin
// Явний Intent — запуск DetailActivity з даними
val intent = Intent(this, DetailActivity::class.java).apply {
    putExtra("item_id", itemId)
    putExtra("item_name", itemName)
}
startActivity(intent)

// Отримання даних в DetailActivity
val itemId = intent.getLongExtra("item_id", 0L)
val itemName = intent.getStringExtra("item_name") ?: ""

Для отримання результату від запущеної Activity використовується Activity Result API, який замінив застарілий startActivityForResult. Новий API типобезпечний, декларативний та працює з Jetpack Compose.

kotlin
private val getResult = registerForActivityResult(
    ActivityResultContracts.StartActivityForResult()
) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        val data = result.data?.getStringExtra("result_key")
    }
}

fun openPicker() {
    val intent = Intent(this, PickerActivity::class.java)
    getResult.launch(intent)
}

Збереження стану при перестворенні

При повороті екрану або зміні конфігурації Android перестворює Activity — послідовно викликає onDestroy та onCreate. Без збереження стану користувач втрачає введені дані, позицію скролу та вибрані елементи. Для вирішення цієї проблеми Android надає два механізми: onSaveInstanceState та ViewModel.

onSaveInstanceState зберігає прості дані в Bundle до виклику onDestroy. ViewModel з Jetpack витримує перестворення Activity та зберігає дані в пам'яті, що ефективніше для складних об'єктів та мережевих запитів.

kotlin
class MainActivity : AppCompatActivity() {

    private val viewModel: MainViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // ViewModel автоматично зберігає дані
        viewModel.items.observe(this) { items ->
            updateAdapter(items)
        }
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putInt("scroll_position", recyclerView.computeVerticalScrollOffset())
    }
}

Архітектура Single Activity та Jetpack

Сучасний підхід від Google — архітектура Single Activity з однією Activity та багатьма Fragment. Додаток використовує одну MainActivity, а всю навігацію виконує Navigation Component через NavHostFragment. Переваги: централізована навігація, спільний ViewModel на екран, коректна робота з Deep Links.

Jetpack Navigation Component автоматизує роботу з back stack, анімації переходів та передачу аргументів. NavHostFragment розміщується в layout Activity, а граф навігації (NavGraph) описує всі екрани та зв'язки між ними. Такий підхід рекомендований Google для нових проєктів і відповідає принципам Material Design.

kotlin
class MainActivity : AppCompatActivity() {

    private val navController by lazy {
        findViewById<NavHostFragment>(R.id.nav_host_fragment)
            .navController
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Налаштування NavigationUI для AppBar
        setupActionBarWithNavController(navController)
    }

    override fun onSupportNavigateUp() = 
        navController.navigateUp() || super.onSupportNavigateUp()
}

Часті запитання

Чим Activity відрізняється від Fragment?

Activity — повноцінний екран додатку з власним життєвим циклом. Fragment — частина UI всередині Activity, яка переживає перестворення Activity та залежить від його Lifecycle. Activity обов'язковий, Fragment опціональний.

Скільки Activity може бути в одному додатку?

Обмежень немає. Кожен екран зазвичай представляє окрему Activity. Для простого додатка достатньо однієї, для багатоекранних — від 5 до 20. Google рекомендує одну Activity з багатьма Fragment.

Що таке launchMode в Activity?

launchMode визначає, як Activity створюється в стеку завдань. Чотири режими: standard (створюється новий екземпляр), singleTop, singleTask (один екземпляр у задачі) та singleInstance (ізольована задача). Режим задається в AndroidManifest.xml.

Як передати дані між Activity?

Через Intent — об'єкт з екстрами (putExtra), в які поміщаються примітиви, рядки, Parcelable або Serializable. Для зворотного зв'язку використовується Activity Result API — сучасна типобезпечна заміна startActivityForResult.

Що таке Configuration Change в Android?

Configuration Change — перестворення Activity при зміні конфігурації (поворот екрану, зміна мови, клавіатура). Система викликає onDestroy → onCreate. Для збереження даних використовується onSaveInstanceState або ViewModel з Jetpack.

Підсумки

  • Activity — базовий компонент Android, що представляє один екран з користувацьким інтерфейсом, керованим через життєвий цикл
  • Життєвий цикл складається з шести колбеків: onCreate, onStart, onResume, onPause, onStop, onDestroy — кожен має суворе призначення
  • Intent забезпечує запуск Activity та передачу даних між екранами через явні та неявні виклики
  • AndroidManifest.xml вимагає обов'язкової реєстрації кожної Activity із зазначенням імені, теми, орієнтації та фільтрів
  • ViewModel з Jetpack зберігає дані при перестворенні Activity, замінюючи ручне збереження в onSaveInstanceState
  • Архітектура Single Activity з Navigation Component — сучасний стандарт, рекомендований Google для Android-проєктів
  • launchMode керує поведінкою Activity в стеку завдань: від стандартного до singleInstance для ізольованих екранів

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також