什么是ZygoteInit电话?

use*_*342 21 android

我会定期在Android电子市场上报告不可复制的例外情况.堆栈跟踪始终如下所示:

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)
Run Code Online (Sandbox Code Playgroud)

ZygoteInit $ MethodAndArgsCaller似乎是直接调用app方法而不是代码.这是怎么回事?


最后复制以下其中一个例外:触摸应用程序图标,触摸文本字段以显示对话框,按主页,杀死应用程序pid,触摸应用程序图标,然后按返回.添加了在onSaveInstanceState和onRestoreInstanceState中保存和恢复应用程序实例变量以修复问题.

仍想在某处找到ZygoteInit调用的描述.

Ali*_*ium 35

Lars Vogel在本文的 Android启动过程中描述了Zygote过程的作用:

在Android系统启动期间,Linux内核首先调用进程"init".init读取文件"/init.rc"和"init.device.rc"."init.device.rc"是特定于设备的,在虚拟设备上,该文件名为"init.goldfish.rc".

init.rc通过程序"/ system/bin/app_process"启动进程"Zygote".Zygote加载核心Java类并执行它们的初始处理.Android应用程序可以重用这些类,因此这一步骤可以让它们更快地启动.完成Zygote的初始工作后,进程将侦听套接字并等待请求.