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

Какие системные процессы активируются при запуске приложения

2.4 Senior🔥 131 комментариев
#Android компоненты#JVM и память

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

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

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

Процессы и компоненты системы Android при запуске приложения

Запуск приложения в Android — это сложный многоступенчатый процесс, в котором участвуют несколько ключевых системных служб и демонов. Вот основные этапы и процессы, которые активируются при запуске приложения.

1. Init-процесс и Zygote

Первый процесс в системе — init (PID 1), он запускает все остальные системные демоны. Один из критически важных — Zygote, предзагруженный процесс, который содержит предварительно инициализированные классы и ресурсы Android Framework. Zygote запускается скриптом init.rc и служит для быстрого порождения новых процессов приложений через механизм fork().

# Пример строки запуска Zygote в init.rc
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server

2. Activity Manager Service (AMS)

Activity Manager Service (AMS) — центральный системный сервис, управляющий жизненным циклом приложений, активностей, стеком задач и процессами. При запросе на запуск приложения (например, через Intent), AMS выполняет:

  • Проверку манифеста приложения на наличие объявленной Activity.
  • Проверку разрешений и намерений (Intent matching).
  • Создание или выбор целевого процесса для запуска активности.

3. Создание процесса приложения

Если процесс приложения еще не запущен, AMS отправляет запрос Zygote на создание нового процесса через сокет:

// Упрощенная схема в Android Framework
Process.ProcessStartResult startResult = Process.start("android.app.ActivityThread",
                                                      data.mEntryPoint,
                                                      app.processName);

Zygote делает fork() своего процесса, создавая новый изолированный процесс с предзагруженными классами Android. Новый процесс запускает ActivityThread — главный поток приложения, который управляет его основным циклом.

4. Инициализация процесса приложения

В новом процессе выполняются:

  • Загрузка классов и ресурсов приложения через ClassLoader.
  • Создание Application объекта (вызывается метод onCreate()).
  • Привязка к системным сервисам через Binder IPC:
    • AMS — для управления жизненным циклом.
    • Window Manager Service (WMS) — для управления окнами и вводом.
    • Package Manager Service (PMS) — для доступа к информации о пакетах.
  • Запуск главного цикла сообщений (Looper/Handler) в потоке UI.

5. Запуск Activity

После инициализации процесса, AMS инициирует создание Activity:

  1. AMS отправляет команду в ActivityThread через Binder.
  2. ActivityThread создает экземпляр Activity через рефлексию (вызов конструктора).
  3. Вызываются жизненные методы Activity: onCreate(), onStart(), onResume().
  4. Window Manager создает поверхность (Surface) для отрисовки UI.

6. Участие других системных сервисов

Параллельно могут активироваться:

  • Package Manager Service (PMS) — предоставляет информацию о приложении, его компонентах и разрешениях.
  • Window Manager Service (WMS) — управляет окнами, слоями, вводом (касаниями, клавиатурой).
  • SurfaceFlinger — композитор графических слоев.
  • Input Manager Service (IMS) — обработка событий ввода.
  • Display Manager Service — управление дисплеями.

7. Управление памятью и производительностью

  • Low Memory Killer (LMK) — отслеживает состояние памяти, может завершать фоновые процессы при нехватке.
  • ART/Dalvik — виртуальная машина, управляет памятью, сборкой мусора, JIT/AOT-компиляцией кода.

Пример последовательности запуска в коде

// ActivityThread (упрощенно)
class ActivityThread {
    fun main() {
        Looper.prepareMainLooper() // Главный цикл сообщений
        ActivityThread thread = ActivityThread()
        thread.attach(false) // Привязка к AMS
        Looper.loop()
    }
    
    private fun attach(system: Boolean) {
        // Получение AMS через Binder
        val mgr = ActivityManager.getService()
        mgr.attachApplication(AppBindData())
    }
}

Ключевые системные процессы и их PID

ПроцессНазначениеТипичный PID
ZygoteПредзагрузка Framework, создание процессов~100
system_serverОсновные системные сервисы (AMS, PMS, WMS)~500
app_processПроцесс приложения>1000
surfaceflingerКомпозиция графики~150

Таким образом, запуск приложения — это скоординированная работа Zygote, system_server (включая AMS, WMS, PMS) и созданного процесса приложения с его ActivityThread. Все взаимодействия построены на Binder IPC, что обеспечивает изоляцию и безопасность, а предзагрузка в Zygote позволяет минимизировать время запуска за счет разделения общих ресурсов.