Подтвердить что ты не робот

Что такое звонки ZygoteInit?

Периодически я получаю исключения на Android Market, которые не воспроизводятся. Трассировка стека всегда начинается следующим образом:

at ...
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4306)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)

ZygoteInit $MethodAndArgsCaller, как представляется, вызывает методы приложения напрямую, а не через код. Как это происходит?


Наконец, воспроизведено одно из следующих исключений: нажмите значок приложения, коснитесь текстового поля, чтобы открыть диалоговое окно, нажмите "Домой", "убить приложение pid", нажмите значок приложения и нажмите "Назад". Добавлены сохранение и восстановление переменных экземпляров приложений в onSaveInstanceState и onRestoreInstanceState для устранения проблемы.

Хотелось бы еще раз найти описание вызовов ZygoteInit.

4b9b3361

Ответ 1

Ларс Фогель описывает роль процесса Zygote во время запуска Android в в этой статье:

При запуске системы Android ядро ​​Linux сначала вызывает процесс "init". init читает файлы "/init.rc" и "init.device.rc". "init.device.rc" является специфичным для устройства, на виртуальном устройстве этот файл называется "init.goldfish.rc".

init.rc запускает процесс "Zygote" через программу "/Система/бен/app_process". Zygote загружает основные классы Java и выполняет их первоначальную обработку. Эти классы могут быть повторно использованы Android, и поэтому этот шаг делает их быстрее Начало. Как только начальная работа Zygote завершена, процесс прослушивает сокет и ждет запросов.