2012-06-06 7 views
7

मान लीजिए कि हमारे पास दो गतिविधियां हैं।

ए - मुख्य गतिविधि, जो "होम लॉन्चर सक्षम" (उचित इरादा फ़िल्टर इत्यादि)

बी - एकल टास्क विनिर्देश के साथ कार्य रूट गतिविधि (इस गतिविधि का केवल एक उदाहरण हो सकता है) और कस्टम कार्य के साथ - मुख्य कार्य रूट से अलग करें)।कार्य के साथ सिंगल टास्क गतिविधि को कैसे हटाया जाए जब हालिया कार्यों से यह समाप्त हो जाता है?

मान लीजिए कि बी एक कार्य का प्रतिनिधित्व करता है, जो केवल समाप्त होने पर ही वैध होता है - इसे वापस लौटने या इसे खत्म करने के बाद हाल के कार्यों से इसे फिर से शुरू करना एक विकल्प नहीं है।

उस समय के किसी बिंदु पर - एक नया कार्य शुरू करने के लिए बी शुरू होता है। लक्ष्य बी को खत्म करने के लिए हालिया कार्य सूची से बी को हटाना है। उपयोगकर्ता बी से अन्य कार्यों (घर लंबे प्रेस का उपयोग करके) पर नेविगेट कर सकता है और फिर जब तक यह समाप्त नहीं हो जाता है तब तक बी पर नेविगेट कर सकता है। लॉन्चर से ए लॉन्च करने से बी को अग्रभूमि में नहीं लाया जाएगा क्योंकि उनके पास अलग-अलग कार्य सम्बन्ध हैं।

एंड्रॉइड बी को किसी कार्य की जड़ के रूप में पहचानता है, इस प्रकार बी हाल ही की कार्य सूची में दिखाई देता है, भले ही यह समाप्त हो जाए, और उपयोगकर्ता हमेशा वापस जा सकता है। बी को ए के साथ एक कार्य में स्थानांतरित करने का कोई समाधान नहीं है, क्योंकि बी बी चल रहा है - उपयोगकर्ता ए और बी कार्यों के बीच स्विच करने में सक्षम होना चाहिए। बहिष्कृत करना बी के मैनिफेस्ट से फ्रॉम रिकेंट्स इसे हाल ही की कार्य सूची से पूरी तरह हटा देता है, और यह भी खराब समाधान है।

इसे कैसे प्राप्त करें? (मेरा बुरा अंग्रेजी के लिए खेद)

+0

कॉलिंग खत्म() में ऑन्यूज़() जब कार्य समाप्त हो गया है तो सही नहीं है? – pawelzieba

+0

लेकिन यह अभी भी हाल की कार्यों की सूची में रहता है –

+0

@MichaelP क्या आप इसे हाल के कार्यों में कभी नहीं दिखाना चाहते हैं? या पूरा होने पर गायब हो जाते हैं? –

उत्तर

3

स्टैंडर्ड उत्तर

क्षमा बुरी खबर के वाहक होने के लिए, लेकिन इस कार्यक्षमता तरीका है कि अपने ऐप के कार्य अधिभावी बिना मानक तरीकों का उपयोग हासिल नहीं किया जा सकता है। फिर भी, यह तब तक काम करेगा जब तक आपका ऐप चल रहा हो। इसके अलावा, ऐसा करने के लिए एक विशेष ROM के साथ रूट डिवाइस की आवश्यकता होगी क्योंकि आप होम बटन की कार्यक्षमता को किसी भी तरह से ओवरराइड नहीं कर सकते हैं। आप जो भी कर सकते हैं वह onNewIntent() का जवाब है जो कि यदि आप होम बटन को लंबे समय तक दबा रहे हैं तो आग नहीं लगती है।

हाल के कार्य विशेष रूप से उपयोगकर्ता के उपयोग के लिए आसानी से उपयोग करने के लिए हैं, ताकि वे ऐप चल रहे हों या नहीं, इस पर ध्यान दिए बिना कि वे किस भी ऐप का उपयोग कर रहे हैं। हालांकि, अच्छी खबर है। यह प्रक्रिया आपके ऐप को जिंदा नहीं रख रही है! यह केवल आपके पैकेज पर इशारा करते हुए एक आइकन है।

दुर्भाग्य से, इसका मतलब है कि यदि आपका ऐप अभी भी चल रहा है, तो कुछ और चल रहा है जो इसे चल रहा है।

अमानक उत्तर

यह रन-टाइम के दौरान पैकेज गुण संपादन (ठीक उसी तरह है कि आप जावा कोड से अक्षम घटकों सक्षम कर सकते हैं/में) के द्वारा ही संभव हो सकता है। यह अत्यधिक निराश है, क्योंकि हालिया कार्य एंड्रॉइड कोर प्लेटफ़ॉर्म की उपयोगिता सुविधा है। इसके लिए कुछ शोध की आवश्यकता होगी।

0

थोड़ा देर हो चुकी है, लेकिन यह अभी भी Google पर शीर्ष हिट के रूप में आता है। कृपया संभावित समाधान के लिए this उत्तर देखें।

  • एक नई गतिविधि सी ExitActivity बुलाया बनाएँ, और अन्य जवाब में वर्णित के रूप प्रकट झंडे जोड़ें:

    अपने मामले में आप करना होगा।

  • गतिविधि बी प्रकट में निम्नलिखित विशेषताएं होनी चाहिए: android:taskAffinity="com.example.ActivityB" android:allowTaskReparenting="true" android:launchMode="singleTask" android:documentLaunchMode="always"
  • सेट सी पर काम आत्मीयता विशेषता बी के बराबर हो जाए
  • ExitActivity में Intent.addFlags करने के लिए कॉल केवल होना चाहिए पिछले तीन: intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
संबंधित मुद्दे