← Назад к вопросам

Что такое Activity Record?

1.6 Junior🔥 131 комментариев
#Android компоненты

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Activity Record?

Activity Record (или ActivityRecord) — это ключевая внутренняя структура данных в системе Android, отвечающая за представление и управление жизненным циклом одного экземпляра Activity в рамках Activity Stack (стека активностей) на уровне системного процесса Activity Manager Service (AMS). Проще говоря, это «двойник» вашей Activity (например, MainActivity.kt), существующий на стороне операционной системы для координации всех взаимодействий: запуска, отображения, паузы, уничтожения и управления окнами.

Когда вы вызываете startActivity(), система создаёт или находит соответствующий ActivityRecord и помещает его в стек. Это позволяет AMS отслеживать состояние, порядок и взаимосвязи между всеми активностями в системе, даже если они принадлежат разным приложениям.

Основные обязанности Activity Record

  • Хранение состояния Activity: Содержит Intent, который запустил Activity, информацию о задаче (Task), к которой она принадлежит, текущее состояние жизненного цикла (например, RESUMED, PAUSED), а также идентификаторы процесса и пользователя.
  • Управление в рамках стека: Каждый ActivityRecord находится в стеке (часть TaskRecord). Это определяет порядок отображения — активность на вершине стека является текущей и видимой.
  • Взаимодействие с WindowManager: ActivityRecord тесно связан с WindowToken и AppWindowToken, которые представляют окно активности на уровне WindowManagerService (WMS). Это мост между логической «активностью» и её физическим отображением на экране.
  • Координация жизненного цикла: AMS использует ActivityRecord для вызова соответствующих методов жизненного цикла (onCreate, onPause и т.д.) в процессе приложения через механизм Binder и ActivityThread.

Взаимосвязь с другими компонентами

Для полного понимания важно видеть ActivityRecord в иерархии:

TaskRecord (Задача, например, "браузер")
    ├── ActivityRecord A (например, BrowserActivity - список вкладок)
    └── ActivityRecord B (например, WebViewActivity - конкретная страница)

ActivityRecord является частью TaskRecord, который представляет собой стек активностей, объединённых общей целью (например, все окна вашего браузера). Несколько задач (TaskRecord) объединены в Activity Display (логический экран). Всей этой иерархией управляет ActivityStackSupervisor.

Пример в контексте кода

Хотя вы напрямую не работаете с ActivityRecord в коде приложения, его влияние можно увидеть. Например, при запуске новой Activity:

// Код в вашем приложении (MyActivity.kt)
val intent = Intent(this, SecondActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(intent)

На стороне системы (AMS) произойдёт примерно следующее:

// Упрощённая иллюстрация логики внутри ActivityManagerService
class ActivityManagerService {
    void startActivity(...) {
        // 1. Создаётся или используется существующий TaskRecord
        TaskRecord task = findOrCreateTask(userId, intent);
        // 2. В рамках задачи создаётся новый ActivityRecord для SecondActivity
        ActivityRecord r = new ActivityRecord(..., intent, ...);
        // 3. Новый ActivityRecord помещается на вершину стека задачи
        task.addActivityToTop(r);
        // 4. Запускается или связывается процесс, у активности вызывается onCreate() и т.д.
        resumeTopActivityUncheckedLocked();
    }
}

Почему это важно для разработчика?

Понимание ActivityRecord помогает глубже разобраться в:

  1. Навигации и back stack: Почему кнопка "Назад" ведёт себя определённым образом.
  2. Launch Modes (standard, singleTop, singleTask, singleInstance): Каждый режим по-разному влияет на создание нового ActivityRecord или повторное использование существующего в стеке.
  3. Задачах (Tasks) и их изоляции: Активности разных приложений могут находиться в одной задаче, и каждая будет представлена своим ActivityRecord.
  4. Отладке сложных сценариев: Анализ стеков через adb shell dumpsys activity activities выводит именно иерархию ActivityRecord и TaskRecord, что незаменимо для диагностики проблем.

Таким образом, ActivityRecord — это фундаментальный строительный блок системы управления окнами и навигации Android. Он служит центральным объектом, через который AMS координирует визуальное представление вашей логики, описанной в классе Activity, обеспечивая предсказуемую и управляемую работу многозадачной среды.