什么是ZygoteInit电话?

时间:2011-08-03 20:08:41

标签: 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)

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


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

还想在某处找到ZygoteInit调用的描述。

1 个答案:

答案 0 :(得分:31)

Lars Vogel描述了在this article启动Android期间Zygote流程的作用:

  

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

     

init.rc通过该程序启动“Zygote”进程   “/系统/斌/ app_process”。 Zygote加载核心Java类和   执行它们的初始处理。这些类可以重用   Android应用程序因此这一步使它们更快   开始。一旦Zygote的初始工作完成,该过程就会收听   套接字并等待请求。