2010-07-10 14 views
81

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

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

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

उत्तर

139

एंड्रॉयड देव गाइड के Application Fundamentals पृष्ठ से:

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

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

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

4 Activities in a Task

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

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

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

यहाँ और अधिक जानकारी के लिए एक अच्छा ब्लॉग पोस्ट है, साथ ही छवि के लिए श्रेय दिया: Android Activities and Tasks series – An introduction to Android’s UI component model

+3

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

+1

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

+0

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

4

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

+0

अंतिम वाक्य सिंगल इंस्टेंस के लिए सच है, एकल टास्क –

+0

@SerdarS नहीं पढ़ना चाहिए। आपकी टिप्पणी की सराहना करते हैं। 'सिंगल टास्क' के बारे में और अधिक जोड़ना - सिस्टम एक नया कार्य बनाता है और नए कार्य की जड़ पर गतिविधि को तुरंत चालू करता है। हालांकि, यदि एक अलग कार्य में गतिविधि का एक उदाहरण पहले से मौजूद है, तो सिस्टम एक नया उदाहरण बनाने के बजाय, अपने 'ऑन न्यूंटेंट()' विधि को कॉल के माध्यम से मौजूदा उदाहरण के इरादे को रूट करता है। एक समय में गतिविधि का केवल एक उदाहरण मौजूद हो सकता है। अधिक [developer.android.com] के लिए (https://developer.android.com/guide/components/activities/tasks-and-back-stack.html) –

+0

समझ गया, तो मैं गलत था। परेशान करने के लिए क्षमा करें। –

27

एक सरल रास्ता में

singleTask:

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

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

singleInstance-

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

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