2010-11-29 13 views
10

ऐसा कुछ है जो मुझे अभी समझ में नहीं आता है।एंड्रॉइड: ऑनक्रेट() को कई बार बुलाया जा रहा है (और मेरे द्वारा नहीं)

मेरी मुख्य गतिविधि कक्षा एक सेवा बनाती है, जो एक नया थ्रेड बनाता है जो एक टीसीपी कनेक्शन की प्रतीक्षा करता है। एक बार एक में आता है, यह एक नई गतिविधि शुरू कर देंगे:

Intent dialogIntent = new Intent(getBaseContext(), VoIPCall.class); 
dialogIntent.putExtra("inetAddress", clientSocket.getInetAddress()); 
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
getApplication().startActivity(dialogIntent); 

उसके बाद, उस वर्ग के onCreate() विधि चलाने हो जाता है। यह 2 धागे बनाएगा: एक रिकॉर्ड और डेटा भेजता है, दूसरा डेटा प्राप्त करता है और बजाता है। लूप के दौरान उन धागे हमेशा के लिए है।

किसी कारण से, मुझे लगता है कि उस अंतिम श्रेणी के onCreate() को फिर से कॉल किया जाता है, जो मेरा प्रोग्राम क्रैश करता है। मुझे समझ में नहीं आता है कि इसे फिर से क्यों कहा जाता है क्योंकि केवल 2 थ्रेड चल रहे हैं, कोई उपयोगकर्ता इंटरैक्शन नहीं है। प्रलेखन कहता है: "गतिविधि पहली बार बनाई गई है जब कॉल किया गया।"। गतिविधि पहले से चल रही है और मैं इसे बनाने की कोशिश नहीं कर रहा हूं।

क्या कोई मुझे इस व्यवहार को समझा सकता है?

उत्तर

13

एंड्रॉइड कुछ "डिवाइस कॉन्फ़िगरेशन परिवर्तन" के बाद आपकी गतिविधि को फिर से बनाएगा। ऐसा एक उदाहरण अभिविन्यास है। आप यहां और अधिक पढ़ सकते हैं ... http://developer.android.com/guide/topics/resources/runtime-changes.html

शायद आपके धागे में कुछ ऐसा कुछ कर रहा है जिसे कॉन्फ़िगरेशन परिवर्तन माना जाता है?

यदि ऐसा है तो आपको इसके बजाय एप्लिकेशन क्लास का विस्तार करना और अपना प्रारंभिकरण करना उपयोगी हो सकता है। यह पोस्ट देखें ... Activity restart on rotation Android

HTH

+0

बहुत बहुत धन्यवाद! – James

+0

जिस समय आपने मुझे दीवार के खिलाफ अपने सिर को टक्कर से बचाया था ... –

0

यह मेरे लिए एक बार हुआ जब मैं इस्तेमाल किया डेवलपर विकल्पों में से एप्लिकेशन अनुभाग में "कार्रवाई न सहेजें"। सुनिश्चित करें कि आपने इसे बंद कर दिया है।

3

मुझे कुछ सैमसंग उपकरणों पर दो बार बुलाया गया गतिविधि का सामना करना पड़ रहा था। मैंने इसे एंड्रॉइड जोड़ने का हल किया: लॉन्चमोड = "सिंगल इंस्टेंस" मैनिफेस्ट पर गतिविधि टैग पर। मुझे उम्मीद है कि यह मदद कर सकता है।

0

मैंने इस मुद्दे को देखा है जब आप इरादे में मूल्यों के साथ एक गतिविधि शुरू करने की कोशिश कर रहे हैं।

नीचे एक उदाहरण जहां Activity_A Activity_B कॉल और इरादे Activity_B में एकत्र होने के लिए में मानों गुजरता है:

Intent intent = new Intent(this, activityB.class); 
intent.putExtra("val1", someValue1); 
intent.putExtra("val2", someValue2); 
intent.putExtra("val3", someValue3); 
this.StartActivity(intent); 

इस मामले में, आप सेट कर सकते हैं android:launchModel="singleInstance" या android:launchModel="singleTop" अपने AndroidManifest.xml और Activity_B में होगा केवल एक बार लॉन्च करें। उम्मीद है की यह मदद करेगा।

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