Понимание Android: Zygote и DalvikVM

Я пытаюсь понять, как Android запускает приложения. Вопрос в том, как (и почему) Zygote развивает новую Dalvik VM? Я не понимаю, почему невозможно запустить несколько приложений в одной виртуальной машине Dalvik.

5 ответов


нет. Далвик не процессы распространяются не.

тем не менее, механизм IPC связующего может сделать очень убедительную работу, заставляя объекты мигрировать в другой процесс и его экземпляр Dalvik. Кроме того, управление памятью очень хорошо подходит для совместного использования страниц только для чтения во всех процессах, которые в них нуждаются. Процесс Dalvik хостинг типичное приложение разветвляется от zygote со всеми общими библиотеками android уже сопоставлены, так что новые уникальные копии не должны быть открытый.

источник: приложения, использующие несколько процессов, используют экземпляр Dalvik?

также проверьте эти ссылки:

http://davidehringer.com/software/android/The_Dalvik_Virtual_Machine.pdf

http://commonsware.com/blog/Articles/what-is-dalvik.html


Q. как именно Zygote вилка Dalvik VM?

Короткий Ответ: Процесс Zygote в основном холодно загружает виртуальную машину при запуске системы. После этого он слушает сокет для входящих команд. Другие процессы (например, ActivityManagerService) записывают команды в этот сокет, когда ему нужен новый процесс для приложения. Эта команда считывается процессом Zygote и вызывает fork () - поэтому дочерний процесс теперь получает предварительно разогретую виртуальную машину, в которой бежать. Вот как Zygote развивает Dalvik VM.

ответ: (это может быть очень долго) После того, как ядро загружено, init.rc анализируется и запускаются собственные службы. С этим,/system/bin/app_process (исходный код: фреймворки / база / cmds/app_process / app_main.cpp) выполняется. Это в конечном итоге вызывает


Zygote также используется для совместного использования системных чертежей со всеми приложениями. Это позволяет системе загружать растровые изображения для кнопок только один раз для пример.


просто добавить еще один пункт к ответам выше, когда zygote делает вилку при получении команды, которую он использует техника копирования при записи. Память копируется только тогда, когда новый процесс пытается ее изменить.

и основные библиотеки что Zygote загружается при запуске только для чтения и не может быть изменен. Так они не скопирован, но общий С новыми раздвоенный процессов.

все это привело к быстрая startup и меньше памяти.


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