एंड्रॉइड सिंगलटैस्क या सिंगलइनस्टांस लॉन्च मोड? [बन्द है]


84

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

हालाँकि, मैं चाहता हूं कि यह खोज गतिविधि केवल एक बार स्टैक पर मौजूद हो ताकि उपयोगकर्ता कई बार खोज कर सकें और वापस क्लिक करने पर उन्हें प्रीविज़्यू दृश्य में लौटाएंगे जो कि वे खोज शुरू करने से पहले थे (बजाय पूर्व खोज परिणामों पर वापस जाने के)

दोनों सिंगलटैस्क और सिंगल इनस्टेंस लॉन्च मोड से लगता है कि मैं ऐसा करना चाहता हूं ताकि मुझे यकीन न हो कि मुझे इस उद्देश्य के लिए कौन सा प्रयोग करना चाहिए और क्यों?

जवाबों:


141

Android देव गाइड के एप्लिकेशन बुनियादी बातों पृष्ठ से:

डिफ़ॉल्ट रूप से, किसी एप्लिकेशन की सभी गतिविधियों में एक-दूसरे के लिए एक आत्मीयता होती है - अर्थात, उन सभी के लिए एक ही कार्य के लिए प्राथमिकता होती है।

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

जैसा कि ऊपर उल्लेख किया गया है, "सिंगलटैस्क" या "सिंगलइंस्टेंस" गतिविधि के एक से अधिक उदाहरण कभी नहीं होते हैं, इसलिए उस उदाहरण से सभी नए इरादों को संभालने की उम्मीद की जाती है। एक "सिंगलइंस्टेंस" गतिविधि हमेशा स्टैक के शीर्ष पर होती है (चूंकि यह कार्य में एकमात्र गतिविधि है), इसलिए यह हमेशा इरादे को संभालने की स्थिति में होता है। हालांकि, एक "सिंगलटैस्क" गतिविधि स्टैक में इसके ऊपर अन्य गतिविधियां हो सकती है या नहीं हो सकती है। यदि ऐसा होता है, तो यह इरादे को संभालने की स्थिति में नहीं है, और इरादे को गिरा दिया जाता है। (भले ही इरादे को गिरा दिया गया हो, लेकिन इसके आने से कार्य अग्रभूमि में आ जाएगा, जहाँ यह बना रहेगा)।

एक कार्य में 4 गतिविधियाँ

चूंकि लॉन्च मोड के साथ गतिविधि का एक से अधिक उदाहरण कभी नहीं होता है, बैक बटन हमेशा आपके मामले में गतिविधि के मौजूदा उदाहरण पर ले जाएगा।

एक महत्वपूर्ण अंतर यह है कि "सिंगलटैस्क" को कुछ चुने जाने पर शुरू की जाने वाली नई गतिविधियों के लिए एक नए कार्य के निर्माण की आवश्यकता नहीं होती है। न ही उसे हर बार बैक बटन पर उस नए कार्य को निकालना होगा।

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

यहाँ अधिक जानकारी के लिए एक अच्छा ब्लॉग पोस्ट है, साथ ही छवि के लिए भी श्रेय दिया गया है: Android क्रियाएँ और कार्य श्रृंखला - Android के UI घटक मॉडल के लिए एक परिचय


4
धन्यवाद! एक अच्छा पढ़ा हुआ लगता है ... बात यह है कि iv का एहसास है कि मैं वास्तव में एक गतिविधि के कई उदाहरण चाहता हूं और केवल जब अग्रभूमि गतिविधि एक खोज गतिविधि है और एक अन्य खोज की जाती है तो उसे उस मौजूदा गतिविधि का उपयोग करना चाहिए (जैसे बाजार कैसे काम करता है) और उस के लिए singeTop बिल्कुल क्या Im के बाद है, लेकिन वैसे भी मदद के लिए धन्यवाद =) धन्यवाद
Kman

1
धन्यवाद। इस अच्छी तरह से लिखी गई पोस्ट ने चुटकी में मेरी मदद की।
icecreamman

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


30

सरल तरीके से-

singleTask:

सिस्टम एक नया कार्य बनाता है और नए कार्य की जड़ में गतिविधि को त्वरित करता है। हालाँकि, यदि गतिविधि का एक उदाहरण पहले से ही एक अलग कार्य में मौजूद है, तो सिस्टम onNewIntent()एक नई आवृत्ति बनाने के बजाय कॉल के माध्यम से मौजूदा उदाहरण के इरादे को बताता है। one instanceएक समय में केवल गतिविधि ही मौजूद हो सकती है।

नोट: हालांकि गतिविधि एक नए कार्य में शुरू होती है, बैक बटन अभी भी उपयोगकर्ता को पिछली गतिविधि पर लौटाता है।

एक घटना-

के रूप में ही "singleTask", सिवाय इसके कि सिस्टम उदाहरण को पकड़े हुए कार्य में अन्य गतिविधियों को लॉन्च नहीं करता है । गतिविधि हमेशा अपने कार्य का एकल और एकमात्र सदस्य होती है; इसके द्वारा शुरू की गई कोई भी गतिविधि एक अलग कार्य में खुलती है


4

singleTaskऔर singleInstanceगतिविधियाँ केवल एक कार्य शुरू कर सकती हैं। वे हमेशा गतिविधि स्टैक के मूल में होते हैं। इसके अलावा, डिवाइस एक समय में गतिविधि का केवल एक उदाहरण रख सकता है - केवल एक ही कार्य।
के लिए और अधिक एंड्रॉयड: launchMode


1
अंतिम वाक्य सिंगलस्टांस के लिए सही है, सिंगलटैस्क पर नहीं
सर्डर समांकिओलू

@SerdarS। आपकी टिप्पणी की सराहना करते हैं। अधिक के बारे में जोड़ना singleTask- सिस्टम एक नया कार्य बनाता है और नए कार्य की जड़ में गतिविधि को त्वरित करता है। हालाँकि, यदि गतिविधि का एक उदाहरण पहले से ही एक अलग कार्य में मौजूद है, तो सिस्टम onNewIntent()एक नई आवृत्ति बनाने के बजाय कॉल के माध्यम से मौजूदा उदाहरण के इरादे को बताता है। गतिविधि का केवल एक उदाहरण एक समय में मौजूद हो सकता है। for more developer.android.com
रूपेश यादव

मिल गया, तो मैं गलत था। परेशान करने के लिए क्षमा करें।
Serdar Samancıoğlu
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.