我会定期在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调用的描述。
答案 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的初始工作完成,该过程就会收听 套接字并等待请求。