38

मेरे पास एक ऐसा ऐप है जो बहुत पदानुक्रमित है (गतिविधियां लीग> टीम> स्थिति> प्लेयर के समान होती हैं) और इसलिए मैंने प्रत्येक गतिविधि singleTop बनाई है नेविगेशन समझदार रखें और डुप्लिकेट उदाहरणों को रोकने के लिए।लॉन्चमोड = "सिंगल टास्क" बनाम सेटिंग गतिविधि लॉन्च करना मोड = "सिंगलटॉप"

अब मैं अपना दूसरा ऐप बना रहा हूं और मैंने देखा है कि यह डुप्लिकेट उदाहरणों को रोकने के लिए मेरे आवेदन को singleTask घोषित करने का सुझाव दिया गया है। क्या कोई प्रत्येक दृष्टिकोण के फायदों की व्याख्या करने में मदद कर सकता है?

मेरा नया ऐप सिर्फ 3 टुकड़ों के साथ एक गतिविधि है और फिर मैं शायद एक सेटिंग गतिविधि और शायद एक एफएक्यू जोड़ दूंगा।

संपादित करें: मुझे अभी एहसास हुआ है कि singleTask मेरे ऐप के डुप्लिकेट उदाहरणों को रोक नहीं रहा है, जैसा कि मैंने सोचा था। अब इसे संभालने का सही तरीका ढूंढ रहे हैं ...

उत्तर

53

मुझे लगता है कि सिंगलटॉप और सिंगल टास्क की आपकी परिभाषा थोड़ी दूर है। सिंगलटॉप एक डुप्लिकेट उदाहरण उत्पन्न कर सकता है। आइए अपने उदाहरण, लीग> टीम> स्थिति> प्लेयर का उपयोग करें। यदि प्लेयर स्क्रीन में कोई बटन है जो आपको लीग स्क्रीन पर ले जाएगा, तो यह लीग> टीम> स्थिति> प्लेयर> लीग बन जाएगा।

जबकि सिंगलटास्क गारंटी देता है कि गतिविधि का केवल एक उदाहरण मौजूद हो सकता है।

+0

मुझे संदेह था कि मैंने उनकी परिभाषा पूरी तरह से समझ नहीं ली है। स्पष्टीकरण के लिए धन्यवाद। मेरा मुख्य लक्ष्य था जब मैं उपयोगकर्ता लीग> टीम> स्थिति में जाता हूं और फिर ऐप को कम करता है और फिर से प्रस्तुत करता है, जो स्थिति के बजाय लीग लोड कर रहा था। सिंगलटॉप घोषित करके, मेरा ऐप अब हमेशा लोड हो रहा है जहां मैंने छोड़ा था। निश्चित नहीं है कि सिंगल टास्क ऐसा क्यों नहीं करता है। – NSouth

+0

@NSouth क्या आपने कभी यह पाया है कि सिंगलेटैट ऐसा क्यों नहीं कर रहा है? – batmaci

13

मैं इस सवाल का जवाब मिला: http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode

"singleTop":

'मानक' से अंतर है, गतिविधि का एक उदाहरण पहले से ही वर्तमान कार्य और प्रणाली के शीर्ष पर मौजूद रहने पर मार्ग इस गतिविधि के इरादे से, कोई नया उदाहरण नहीं बनाया जाएगा क्योंकि यह एक नई ऑब्जेक्ट बनाने के बजाय ऑन न्यूंटेंट() विधि को बंद कर देगा। चलिए उदाहरण के रूप में ट्विटर-ओथ एकीकरण लेते हैं।

"singleTask":

एक नया काम हमेशा बनाया जाएगा और एक नया उदाहरण जड़ एक के रूप में कार्य करने के लिए दिया जाएगा। हालांकि, यदि किसी भी कार्य में कोई गतिविधि उदाहरण मौजूद है, तो सिस्टम उस गतिविधि आवृत्ति को ऑन न्यूइन्टेंट() विधि कॉल के माध्यम से लक्षित करता है। इस मोड में, गतिविधि के उदाहरणों को उसी कार्य में धक्का दिया जा सकता है। और यदि उपयोगकर्ता एकल टास्क गतिविधि से बैक कुंजी पर क्लिक करता है, तो सिस्टम उपयोगकर्ता को पिछली गतिविधि में वापस कर देगा।

19

एंड्रॉयड गतिविधि launchMode

4 मोड ...

"मानक" "singleTop" "singleTask" "singleInstance"

डिफ़ॉल्ट मोड "मानक" है।

मोड दो समूहों में आते हैं। मानक और सिंगलटॉप एक तरफ आता है और एकल टास्क और एकल इंस्टेंस एक और तरफ आता है।

मानक और सिंगलटॉप के बीच मुख्य अंतर मानक में है, हर बार मानक गतिविधि के लिए एक नया इरादा, एक नया उदाहरण बनाया जाता है। सिंगलटॉप के मामले में, एक नया उदाहरण बनाया गया है लेकिन गतिविधि का एक उदाहरण पहले से ही ढेर के शीर्ष पर है, यह एक नया उदाहरण नहीं बनायेगा।

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

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

http://smartandroidians.blogspot.in/2010/04/activity-launch-mode-in-android.html

5

Understanding Activity launch mode से:

मानक (डिफ़ॉल्ट): - गतिविधि वर्ग के कई उदाहरणों instantiated और कई उदाहरणों में एक ही कार्य या विभिन्न कार्यों के लिए जोड़ा जा सकता है हो सकता है। अधिकांश गतिविधियों के लिए यह आम तरीका है।

singleTop: - मानक से अंतर है, है गतिविधि का एक उदाहरण पहले से ही वर्तमान कार्य और सिस्टम मार्गों इस गतिविधि के इरादे के शीर्ष पर मौजूद रहने पर, कोई नया उदाहरण बनाया जाएगा क्योंकि यह होगा नई ऑब्जेक्ट बनाने के बजाय ऑन न्यूइन्टेंट() विधि को आग लगाना।

एकल टास्क: - एक नया कार्य हमेशा बनाया जाएगा और एक नया उदाहरण को रूट के रूप में कार्य में धकेल दिया जाएगा। हालांकि, यदि कोई गतिविधि उदाहरण किसी भी कार्य में मौजूद है, तो सिस्टम उस गतिविधि के इरादे को उदाहरण पर ऑन न्यूइन्टेंट() विधि कॉल के माध्यम से प्रस्तुत करता है। इस मोड में, गतिविधि उदाहरणों को उसी कार्य में धक्का दिया जा सकता है। यह मोड गतिविधियों के लिए उपयोगी है जो प्रविष्टि बिंदुओं के रूप में कार्य करते हैं।

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

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