2012-06-01 20 views
21

"RuntimeException: गतिविधि है कि फिर से शुरू नहीं की ठहराव प्रदर्शन" (। मैं stackoverflow पर एक समान प्रश्न देखते हैं, लेकिन इस सवाल का जवाब वहाँ एक सही जवाब नहीं है, और समस्या के संदर्भ भी थोड़ा अलग है)

"java.lang.RuntimeException: गतिविधि को रोकना जो कि फिर से शुरू नहीं किया गया है"

मैं एक गेम एप्लिकेशन विकसित करता हूं (जो सामान्य दृश्य और GLSurfaceView दोनों का उपयोग करता है)। अगर मैं अपने फोन को बहुत तेज़ी से चालू और बंद करता हूं, तो मैं कभी-कभी इस अपवाद का कारण बन सकता हूं (गतिविधि थ्रेड द्वारा फेंक दिया गया), लेकिन मेरा एप्लिकेशन अपवाद के बाद सामान्य रूप से चल रहा है। मेरा ऐप एक परिदृश्य है, और यह मैनिफेस्ट में भी सही ढंग से सेट है (अभिविन्यास और कॉन्फ़िगरेशन सहित)।

क्या यह ठीक है?

यह मेरे आवेदन के आवेदन नाम के तहत गतिविधि थ्रेड द्वारा फेंक दिया गया एक रनटाइम अपवाद है, लेकिन यह मेरे ऐप को समाप्त नहीं करता है।

+0

यदि आप कुछ कोड पोस्ट करते हैं तो यह आम तौर पर मदद करता है ताकि लोग गलत क्या देख सकें। मैं इसे लेता हूं कि आपके फोन को चालू करना किसी भी तरह से विराम को गड़बड़ कर देता है और एंड्रॉइड में फिर से शुरू होता है। मैं इसके बारे में ज्यादा चिंता नहीं करता, जब तक कि आपके गेम में खिलाड़ियों को अपने फोन को बहुत तेज़ी से चालू और बंद नहीं किया जाता। – Christine

+0

मुझे पता है कि कुछ लोग कॉल करने या गलती पर कॉल करने की गलती करते हैं, लेकिन मैं नहीं करता हूं। आवेदन किसी भी हिस्से को पोस्ट करने के लिए बहुत बड़ा और जटिल है; बेशक, मैं छद्म कोड का उपयोग कर सकता हूं लेकिन यह सुनिश्चित नहीं करता कि मुझे इसे कहाँ लेना चाहिए, क्योंकि समस्या सामान्य है। उम्मीद है कि यह हानिरहित है। –

+0

आह, कॉल या ऑन्यूज़ पर कॉल करना कोई गलती नहीं है। कोड डालने के लिए यह एक अच्छी जगह है। आपके मामले में, मैं लॉग इन स्टेटमेंट्स को सभी गतिविधियों में रीज्यूम और ऑन पॉज़ विधियों पर रखूंगा, और अपवाद के बाद लॉग फाइलों का निरीक्षण करूंगा। कम से कम तब आप जानते हैं कि कारण क्या समस्या पैदा कर रहा है। – Christine

उत्तर

43

मुझे अभी यह समस्या है क्योंकि मैं गतिविधि को कॉल कर रहा था। (Crinish() और .startActivity() - एंड्रॉइड संस्करण के आधार पर)। बेशक, आप केवल उन कार्यों को कॉल करेंगे क्योंकि आप भाषा को फिर से लोड करना चाहते हैं, अभिविन्यास को रीसेट करना चाहते हैं और इसी तरह की चीजें जिन्हें आप केवल गतिविधि मनोरंजन के साथ ही कर सकते हैं।

हालांकि आप उन कार्यों (.finish() या .recreate()) को ऑनस्यूम() से कॉल नहीं कर सकते हैं। यदि आप करते हैं, तो आपको उल्लिखित गैर-घातक अपवाद प्राप्त होगा।

मैंने एक मिलीसेकंड के लिए .recreate() कॉल में देरी करके इस मुद्दे को "हल" किया ताकि गतिविधि ठीक से शुरू हो जाए और केवल तब ही मारे जाए।

Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() 
    { 
    @Override 
    public void run() 
    { 
     log.i("TX.refresh", "Switching to %s from %s", lang, lang); 
     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) 
     { 
     ctx.finish(); 
     ctx.startActivity(ctx.getIntent()); 
     } else ctx.recreate(); 
    } 
    }, 1); 
+0

इसके लिए आपको बहुत बहुत धन्यवाद, मैंने लैंग बदलने और गतिविधि पर वापस आने के दौरान अपवादों का उल्लेख किया था। इसने मेरे अपवाद हल किए। thx ... अभी भी नहीं पता क्यों 1ms देरी बस इसे हल किया ... –

+1

समस्या यह है कि OnResume के भीतर, आपकी गतिविधि अभी तक शुरू नहीं हुई है। इसलिए आपको त्रुटि संदेश मिलता है। 1 एमएस से विलंब करने से फ्रेमवर्क अपना जादू कर सकता है और केवल तब गतिविधि को पुन: प्रयास करता है। – velis

+0

ग्रेट, स्पष्टीकरण के लिए धन्यवाद! –