2011-08-03 41 views
18

我定期收到Android Market上報告的不可重現的例外情況。堆棧跟蹤總是開頭是這樣的:ZygoteInit電話是什麼?

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似乎是通過代碼來調用應用程序的方法,而不是直接的。這是怎麼發生的?


最後複製這些異常如下的一個:觸摸應用程序圖標,輕觸文本字段以彈出對話框,按Home,殺應用PID,觸摸應用程序圖標,然後按返回。在onSaveInstanceState和onRestoreInstanceState中添加了應用程序實例變量的保存和恢復以修復問題。

仍然想找到ZygoteInit調用的地方的描述。

+0

是否有可能你有孤立的偵聽器設置試圖調用回調,這就是你所看到的直接調用?..跟蹤似乎並不奇怪。 –

+1

該應用實現了View.OnClicklistener.onClick(View)。但是,堆棧跟蹤不會以onClick中的開關開始;它只顯示其中一種情況下的方法調用,甚至不是該情況下的第一種方法。另外,另一種情況下的方法必須先運行。正常操作的日誌從不顯示任何對ZygoteInit的調用。這就是讓我的蹤跡看起來很奇怪。 – user877342

回答

26

拉爾斯·沃格爾介紹this article啓動受精卵的過程期間,Android的作用:

在Android系統的Linux內核首先調用 過程「初始化」的啓動。 init讀取文件「/init.rc」和「init.device.rc」。 「init.device.rc」是設備特定的,在虛擬設備上,這個文件 被稱爲「init.goldfish.rc」。

init.rc通過程序 「/ system/bin/app_process」啓動進程「Zygote」。 Zygote加載核心Java類,並對其執行初始處理。這些類可以通過Android應用程序 重複使用,因此這一步使它們更快到 開始。一旦Zygote的初始工作完成,該進程就會偵聽一個套接字並等待請求。

相關問題