2011-08-03 8 views
18

समय-समय पर मुझे एंड्रॉइड मार्केट पर अपवादों की सूचना मिली है जो पुन: उत्पन्न नहीं होते हैं। स्टैक ट्रेस हमेशा इस तरह शुरू:ज़ीगोटइनिट कॉल क्या हैं?

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 कोड के माध्यम से एप्लिकेशन तरीकों बुला किए जाने की बजाय सीधे दिखाई देता है। यह कैसे हो रहा है?


अंत में इन अपवादों इस प्रकार से एक reproduced: स्पर्श एप्लिकेशन आइकन, पाठ फ़ील्ड स्पर्श करें, संवाद, प्रेस होम ऊपर लाने एप्लिकेशन पीआईडी ​​मार, स्पर्श एप्लिकेशन आइकन, और प्रेस पर वापस। समस्या को ठीक करने के लिए SaveInstanceState और onRestoreInstanceState में ऐप इंस्टेंस वैरिएबल की बचत और पुनर्स्थापित करना जोड़ा गया।

अभी भी ज़ीगोटइनिट कॉल का वर्णन कहीं भी ढूंढना चाहेगा।

+0

क्या यह संभव है कि आपने श्रोताओं के सेटअप को अनाथ किया है जो कॉलबैक का आह्वान करने की कोशिश कर रहे हैं और यही वह है जिसे आप सीधे बुलाए जाने के रूप में देख रहे हैं? .. ट्रेस मेरे लिए यह अजीब नहीं लगता है। –

+1

ऐप View.OnClicklistener.on क्लिक करें (देखें) लागू करता है। हालांकि स्टैक ट्रेस ऑनक्लिक में स्विच के साथ शुरू नहीं होता है; यह मामलों में से एक में केवल एक विधि कॉल दिखाता है, यहां तक ​​कि मामले में पहली विधि भी नहीं। इसके अलावा, किसी अन्य मामले में विधियों को पहले चलाने के लिए है। सामान्य ऑपरेशन का लॉग ज़ीगोटइनिट को कभी भी कोई कॉल नहीं दिखाता है। यही कारण है कि ट्रेस मेरे लिए अजीब लग रहा है। – user877342

उत्तर

26

लार्स वोगेल Android के दौरान युग्मनज प्रक्रिया की भूमिका का वर्णन करता है this article में शुरू: एंड्रॉयड प्रणाली लिनक्स कर्नेल पहले प्रक्रिया "init" कहता है की स्टार्टअप के दौरान

। init "/init.rc" और "init.device.rc" फ़ाइलों को पढ़ता है। "init.device.rc" डिवाइस विशिष्ट है, वर्चुअल डिवाइस पर यह फ़ाइल को "init.goldfish.rc" कहा जाता है।

init.rc प्रोग्राम "/ system/bin/app_process" के माध्यम से प्रक्रिया "ज़ीगोट" शुरू करता है। ज़ीगोट कोर जावा क्लासेस लोड करता है और उनकी प्रारंभिक प्रसंस्करण करता है। इन कक्षाओं को एंड्रॉइड एप्लिकेशन द्वारा पुन: उपयोग किया जा सकता है और इसलिए यह चरण उन्हें प्रारंभ करने में तेज़ी से बनाता है। एक बार ज़ीगोट का प्रारंभिक कार्य पूरा हो जाने पर, प्रक्रिया को सॉकेट सुनती है और अनुरोधों की प्रतीक्षा करती है।

संबंधित मुद्दे