app_process32 Запуск среды выполнения, затем запуск приложения Тип файла: команда usage: app_process [java-options] cmd-dir start-class-name [options] Комментарии Из коментариев в исх. тексте: --zygote : Начать в режиме зиготы --start-system-server : Запустить системный сервер. --application : запуск в режиме приложения (автономный, не зиготный). --nice-name : Красивое имя для этого процесса. так как мы перезапишем весь блок аргумента, когда применим красивое имя к argv0. передается виртуальной машине, даже если в ней есть пробел Запуск Android Zygote Вот несколько различных заметок о запуске процесса zygote в Android. Последовательность шагов запуска Zygote: Это основано на строке из init.rc: служба zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server но вы можете указать --zygote вместо имени начального класса. источник для app_process находится в frameworks/base/cmds/app_process/app_main.cpp это программа для отладки самого zygote/dalvik AndroidRuntime — основной класс для запуска среды выполнения dalvik. Источник находится в frameworks/base/core/jni/AndroidRuntime.cpp метод start() запускает виртуальную машину Выдается LOG_BOOT_PROGRESS_START с системным временем (SYSTEM_TIME_MONOTONIC) вызывается startVM() в конечном итоге вызывается callStaticVoidMethod(), чтобы фактически начать выполнение начального класса с помощью метода «main» в коде Dalvik. com.android.internal.os.ZygoteInit:main() начинает выполняться источник находится по адресу: frameworks/base/core/java/com/android/internal/os/ZygoteInit.java профайлер запущен сокет Zygote зарегистрирован (для последующей связи для запуска приложений) классы и ресурсы предварительно загружены если startSystemServer установлен, то запускается системный сервер командная строка для системного сервера: --setuid=1000 --setgid=1000 \ --setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,3001,3002,3003 \ --capabilities=130104352,130104352 \ --runtime-инициализация \ --nice-name=системный_сервер \ com.android.server.SystemServer класс, который начинает выполняться: com.android.server.SystemServer делается вызов Zygote.forkSystemServer(), чтобы фактически запустить этот другой процесс zygote работает в «режиме выбора цикла», когда один процесс вращается в ожидании связи для запуска последующих приложений. см. runSelectLoopMode() принимаются новые соединения (и помещаются в массив "peers") команда spawn, полученная по сети, выполняется вызовом метода runOnce() исходный код для этого находится по адресу: frameworks/base/core/java/com/android/internal/os/ZygoteConnection.java. В конце концов, делается вызов Zygote.forkAndSpecialize(), который фактически выполняет разветвление Последовательность шагов запуска system_server (или SystemServer) Источник для SystemServer находится в: frameworks/base/services/java/com/android/server/SystemServer.java. в методе "ServerThread::run()" происходит следующий запуск: Выдается LOG_BOOT_PROGRESS_SYSTEM_RUN Запущено множество важных служб: Также могут быть запущены дополнительные службы: Служба регистрации Сервис обоев Аудио Сервис Наблюдатель в гарнитуре Док-наблюдатель Служба резервного копирования Служба виджетов приложений |