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 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

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