2015-02-18 18 views
6

मेरे पास दो गतिविधियां हैं और मैं उन्हें फिर से बनाने या डुप्लिकेट किए बिना उनके बीच स्विच करना चाहता हूं। प्रत्येक गतिविधि में एक बटन होता है जो उपयोगकर्ता को FLAG_ACTIVITY_REORDER_TO_TOP के साथ एक इरादे का उपयोग करके दूसरे को भेज देगा।FLAG_ACTIVITY_REORDER_TO_TOP रोटेशनएक्सप्शन या रोटेशन पर ब्लैक स्क्रीन का कारण बनता है

यह निम्न स्थिति के अलावा महान काम करता है:

  1. अनुप्रयोग एक बल करीब
  2. बटन हिट गतिविधि 2
  3. पर जाने के लिए गतिविधि 1 करने के लिए वापस जाने के लिए बटन हिट के बाद नए सिरे से शुरू
  4. स्क्रीन घुमाएं।

इस बिंदु पर ऐप "फिर से शुरू नहीं होने वाली गतिविधि को रोकना" के साथ दुर्घटनाग्रस्त हो जाता है। लॉलीपॉप सिर्फ एक ब्लैक स्क्रीन दिखाता है।

अजीब बात यह है कि यदि आप चरण 4 से पहले होम स्क्रीन पर जाते हैं और ऐप फिर से शुरू करते हैं और फिर उपरोक्त स्थिति को घुमाते हैं तो कोई समस्या नहीं होती है और ऐप बंद/पुनरारंभ होने तक ठीक काम करता है।

यह स्थिति FLAG_ACTIVITY_REORDER_TO_TOP के लिए विशिष्ट प्रतीत होती है और एंड्रॉइड 5.0 और 4.4 और केवल एक नई शुरुआत पर होती है।

मेरे पास मैनिफेस्ट में गतिविधियों पर कोई विशेषता नहीं है।

MainActivity: 
public void goSecond(View v) { 
     Intent i = new Intent(this, SecondActivity.class); 
     i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
     startActivity(i); 
} 

SecondActivity: 
    public void goFirst(View v) { 
     Intent i = new Intent(this, MainActivity.class); 
     i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
     startActivity(i); 
    } 

मैं किसी अन्य जीवन चक्र तरीकों अधिभावी नहीं कर रहा हूँ या कुछ और करने: लेआउट बस एक बटन है कि एक विधि है कि इस तरह दिखता है कॉल कर सकते है।

कोई विचार?

उत्तर

0

दिलचस्प मामला, यदि आप जीवन चक्र विधियों को डीबग करते हैं तो आप देख सकते हैं कि, जैसे ही आप स्क्रीन घुमाते हैं, onStop को से पहले नहीं कहा जा रहा है। दुर्घटना तब लॉग

java.lang.RuntimeException: Performing pause of activity that is not resumed: MainActivity 

java.lang.RuntimeException: Performing stop of activity that is not resumed: MainActivity 

के बाद मैं इसे ढांचे में एक बग है लगता है। दिलचस्प बात यह है कि यह ध्वज FLAG_ACTIVITY_REORDER_TO_FRONT के साथ ही प्रतीत होता है। Is any alternate of Intent.FLAG_ACTIVITY_REORDER_TO_FRONT (उल्लेख एंड्रॉयड बग टिकट नोटिस)


वर्कअराउंड:: तो

लेखन के रूप में मैं सिर्फ इस पोस्ट, जो स्पष्ट रूप से पता चलता है कि इस ध्वज के साथ एक प्रमुख दोष प्रतीत हो रहा है कि पाया आप व्यवहार FLAG_ACTIVITY_REORDER_TO_FRONT आप देता है पर dependend कर रहे हैं, और आप इसे (एक तरह से) नकल करने के लिए, आप

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
बजाय

इस्तेमाल कर सकते हैं चाहते हैं (हालांकि, यह काम करता है sl थोड़ा अलग - यह इसे पुन: व्यवस्थित करने के बजाय, बुलाए गए गतिविधि के शीर्ष पर ढेर को साफ़ करता है, इसलिए आपके पास कम से कम 1 गतिविधि का पुन: निर्माण होगा)।

एक और विकल्प मैनिफेस्ट में गतिविधि की परिभाषा में launchMode विशेषता के साथ खेलना है।launchMode="singleInstance" जो हो सकता है वह हो सकता है (हालांकि यह आपके कार्य स्टैक के साथ गड़बड़ करता है, इसलिए सावधानी से संभाल लें)

आखिरकार, यदि आपका डिज़ाइन इसकी अनुमति देता है, तो उन मुद्दों से पूरी तरह से बचने के लिए टुकड़ों पर विचार करें।

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