जब मेरी ढेर इस स्थिति में है:गतिविधि स्टैक का प्रबंधन कैसे करें?
A->B->C
अगर मैं डी गतिविधि शुरू, मैं चाहता हूँ कि गतिविधि ढेर हो जाता है:
A->D
ध्यान दें कि गतिविधि सी एक संवाद है।
जब मेरी ढेर इस स्थिति में है:गतिविधि स्टैक का प्रबंधन कैसे करें?
A->B->C
अगर मैं डी गतिविधि शुरू, मैं चाहता हूँ कि गतिविधि ढेर हो जाता है:
A->D
ध्यान दें कि गतिविधि सी एक संवाद है।
यहां दिए गए कदम हैं जो आवश्यक होंगे:
fromActivityC
इरादे और ध्वज FLAG_ACTIVITY_CLEAR_TOP
सेट के साथ बंडल किया गया।अब गतिविधि के निर्माण में इस बूलियन "से एक्टिविटीसी" के लिए पहली बार जांच करें और यदि वर्तमान में गतिविधि लॉन्च करें तो सामान्य प्रवाह जारी रहता है।
// following code can be used to get the boolean in the oncreate
boolean entrypoint=this.getIntent().getExtras().getBoolean("fromActivityC");
एक लील वैकल्पिक हल लेकिन आशा है कि यह
एक छोटी सी hacky, लेकिन आप गतिविधि एक शुरू कर सकता है ढेर को साफ़ करते हुए, तो गतिविधि डी
गतिविधि एक गायब होने से पहले एक पल के लिए प्रकट हो सकता है शुरू हालांकि
दूर करने के लिए कई तरीका नहीं है स्टैक से एक गतिविधि या इसे स्टैक्ड करने से रोकें:
स्टैक से अपनी गतिविधि को निकालने के लिए, बस finish()
पर कॉल करें, here देखें।
आप अपने प्रकट संपत्ति में भी कार्यान्वित कर सकते हैं: एंड्रॉइड: noHistory = "true" जो किसी गतिविधि को ढेर करने से रोकता है।
इस सवाल का रूप और अधिक विस्तार देखें: Removing an activity from the history stack
आप ActivityB
परिष्करण जब आप ActivityC
लांच की कोशिश कर सकते हैं और ActivityC
में एक ही जब ए
आपका कोड की शुरूआत इस तरह दिखेगा:
Intent i = new Intent(this.class.ActivityC);
startActivity(i);
ActivityB.finish();
मैं नहीं कर सकता, गतिविधि सी है पर एक नज़र रखना चाहिए एक संवाद यदि मैं सी शुरू करता हूं तो मैं बी को समाप्त करता हूं, मैं सी के नीचे ए देखता हूं। – Michele
में मदद करता है सी के कॉलबैक पर, एक करने के लिए वापस एक संदेश भेज देंगे और Acall खत्म से अपने विकास शुरू करते हैं, यह बी और सी (खत्म हो जाएगा क्योंकि सी है बी के अलावा)।
एक बेहतर समाधान A
में Intent
सामग्री का मूल्यांकन के आधार पर नहीं किया गया है: ध्वज का उपयोग FLAG_ACTIVITY_TASK_ON_HOME
आप भी अन्य झंडे Android Intent
धन्यवाद, दिलचस्प चाल, यह चलता है ... लेकिन कीबोर्ड पर टाइप करना मुझे एक विचार था: जब ए कॉल बी, ए खत्म करें; जब बी वापस चला जाता है, ए फिर से बनाना; जब सी कॉल डी करता है, तो FLAG_ACTIVITY_CLEAR_TOP के साथ डी बनाएं। Yessss !! – Michele
हाँ जो काम करना चाहिए ..लेकिन आपको नहीं लगता कि इस तरह की गतिविधियों को फिर से बनाने में बहुत सी सीपीयू चक्र लगेंगे और गतिविधि के ढेर के बहुत ही उद्देश्य को हराया जाएगा .. कुछ सोचने के लिए :) – Nitin