9

प्रश्न शीर्षक जटिल लगता है लेकिन मेरी स्थिति यहां है।ऑनक्रेट() को अनुमति सेटिंग्स बदलने के बाद हालिया कार्य से फिर से खोलने पर कॉल किया जाता है

मेरे पास एक गतिविधि के भीतर एक नक्शा खंड है। सरल। मानचित्र के प्रदर्शन की अनुमति देने के लिए संग्रहण अनुमति चालू करें, ठीक काम करता है। होम बटन दबाकर ऐप को पृष्ठभूमि में रखता है, फिर स्टोरेज अनुमति बंद कर देता है और ऐप को हालिया कार्य, ऐप क्रैश से खोलता है।

समस्या गतिविधि होस्ट के रेस्यूम() पर कॉल करने की बजाय समस्या है, ऑनक्रेट() को मेजबान गतिविधि के साथ-साथ मानचित्र खंड के क्रिएटिव व्यू() पर भी कहा जाता है। इस प्रकार यह अपवाद फेंक रहा है।

ऐसा लगता है कि अनुमति बदलने पर ऐप प्रक्रिया की मौत हो जाती है और इस प्रकार गतिविधि को फिर से बनाया जाता है।

09-24 14:42:55.071: E/AndroidRuntime(12918): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
09-24 14:42:55.071: E/AndroidRuntime(12918): Caused by: 
java.lang.NullPointerException: Attempt to write to field 'int android.support.v4.app.Fragment.mNextAnim' on a null object reference 
09-24 14:42:55.071: E/AndroidRuntime(12918): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:718) 
09-24 14:42:55.071: E/AndroidRuntime(12918): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489) 
09-24 14:42:55.071: E/AndroidRuntime(12918): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:548) 

super.onStart() से गतिविधि

+1

जीवन चक्र विधियों को परिवर्तित नहीं किया गया है। क्या हो रहा है यह गतिविधि सिस्टम द्वारा नष्ट कर दी गई थी। यही कारण है कि आपकी गतिविधि को फिर से बनाया गया है और क्यों क्रेट को बुलाया जा रहा है। – eddiecubed

+0

क्या आप कह रहे हैं कि अनुमति परिवर्तन के कारण गतिविधि नष्ट हो गई है? क्योंकि ऑनस्यूम() को सामान्य रूप से कहा जाता है, उस क्रिएट() को उस गतिविधि के लिए अनुमति के बदले में कहा जाता है, मेरे मामले में गतिविधि में नक्शा खंड। – WenChao

+1

जब कोई अनुमति परिवर्तन होता है तो गतिविधि हमेशा – greywolf82

उत्तर

0

से समस्या का समाधान अब से सिर्फ गतिविधि की onCreate में getSupportFragmentManager().popBackStackImmediate(); कॉल करने के लिए() मानचित्र टुकड़ा पुन: बनाने की कोशिश कर रहा से रोकने के लिए है।

पॉपबैकस्टैक() इस मामले में काम नहीं करेगा क्योंकि यह असीमित है।

0

शायद थोड़ी देर हो चुकी है, अभी भी बाहर दूसरों भविष्य में :)

मदद कर सकता है आप अगर savedInstanceStatenull जो onCreate(Bundle savedInstanceState) में भेजा जाता है है देखने के लिए जाँच करनी चाहिए। यदि यह null उसके बाद ही है, तो जैसे Fragment का शुभारंभ:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_layout_file); 

     if (savedInstanceState == null) { 
      // do fragment transactions here 
     } 
    } 
+0

ठीक है लेकिन ऑनक्रेट() के बाद, ऑनडस्ट्राय() को भी कहा जाता है ताकि ऐप बंद हो। बचाया गया हैस्टेंसस्टेट मेरे ऐप को खत्म होने से रोकता है? – MiloRambaldi

+0

@MiloRambaldi 'savedInstanceState' में केवल ऐप की अंतिम स्थिति के बारे में जानकारी शामिल है (यदि इसे रैम की कमी के कारण सिस्टम द्वारा रोक दिया गया था या इस मामले में किसी भी प्रकार की अनुमतियों को टॉगल करने के कारण)। ऐप को मारने से रोकने के लिए इसका कोई मतलब नहीं है। – Sazid

0

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

सिस्टम द्वारा आपके आवेदन की अनुमति बदलने की अनुमति का कारण बनना और अब यदि आप अपना ऐप ओवरव्यू स्क्रीन से खोलते हैं, तो यह आपके एप्लिकेशन को पुनरारंभ करेगा, जो आपके क्रैश का मुख्य कारण है क्योंकि आप खंड वस्तु पर एक ऑपरेशन कर रहे हैं, जो अब शून्य है।

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

दुर्घटना को रोकने के लिए आप कोड की इस पंक्ति का उपयोग कर टुकड़ा उदाहरण मिलना चाहिए -

mapFragment = (MapFragment)getSupportFragmentManager().findFragmentByTag("MAP FRAG"); 

यहाँ "एमएपी frag" एक टैग आप अपने टुकड़ा को देने के लिए है।

यदि आपके पास कोई भ्रम है तो साझा करें।

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

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