2010-01-15 8 views
111

मैंने एंड्रॉइड के लिए कुछ ऐप्स विकसित किए हैं, और यह प्रश्न हमेशा रहते हैं:एंड्रॉइड: बेहतर क्या है - कई गतिविधियां या मैन्युअल रूप से स्विचिंग दृश्य?

मुझे अपने यूआई को कैसे व्यवस्थित करना चाहिए? क्या मुझे गतिविधि के बाद गतिविधि लॉन्च करना चाहिए और फोन को "बैक" बटन बनाने के लिए छोड़ देना चाहिए, या मुझे अधिक अनुकूलित करना चाहिए, लेकिन कार्यान्वित करने के लिए और अधिक जटिल, मैन्युअल रूप से स्विच करने के तरीके और मैन्युअल रूप से "बैक" बटन कार्यक्षमता कर रहे हैं?

आपको क्या लगता है (या पता है) बेहतर अभ्यास है?

+4

नए पाठकों के लिए, कृपया ध्यान दें कि यह प्रश्न काफी पुराना है, और आज सवाल "एकाधिक विचार या एकाधिक गतिविधियां" के बजाय "एकाधिक टुकड़े या एकाधिक गतिविधियां" होने की अधिक संभावना है। Http://stackoverflow.com/a/10794086/199364 में अपडेट देखें। साथ ही, खंड बनाम गतिविधियों के बारे में अन्य स्टैक ओवरफ्लो विषयों के लिए Google - बहुत अच्छे उत्तरों के बहुत सारे। – ToolmakerSteve

उत्तर

96

मैं कहूंगा कि कई गतिविधियां लगभग हमेशा अधिक समझ में आती हैं। मुझे नहीं लगता कि एंड्रॉइड को अपने विचारों को लगातार बदलने के लिए डिज़ाइन किया गया है - आप बहुत ज्यादा याद करते हैं। आपको स्वयं को वापस लागू करना होगा, आपको कोई अंतर-गतिविधि संक्रमण नहीं मिलता है, आपको सही स्थिति में किसी एप्लिकेशन को फिर से शुरू करने के लिए बहुत से आंतरिक तर्क को लागू करना होगा। यदि आप अपने ऐप को क्रियाकलापों में विभाजित नहीं करते हैं, तो यह आपके आवेदन के प्रवाह को बदलने के लिए बाद में बहुत कठिन हो जाता है। इसके परिणामस्वरूप एक मेगा-एक्टिविटी भी होती है जो कोड के बहुत से छोटे टुकड़ों की तुलना में संभालना बहुत मुश्किल हो सकती है।

मुझे कल्पना करने में परेशानी है कि गति वास्तव में एक मुद्दा है; यदि ऐसा है तो आप प्रत्येक गतिविधि को शुरू करने के तरीके में कुछ गड़बड़ कर रहे हैं। उदाहरण के लिए, मैंने क्रियाकलापों के बीच Serializable वस्तुओं को पारित करने का प्रयास किया, और यह अविश्वसनीय रूप से धीमा साबित हुआ; जब मैं वस्तुओं को गुजरने की एक तेज विधि पर स्विच करता हूं, तो लॉन्च करने की गति की गति बहुत बढ़ जाती है।

इसके अलावा, मुझे लगता है कि यह कह रहा है कि the Android guidelines for Activity and Task Design स्विचिंग दृश्यों का उल्लेख नहीं करते हैं; यह एक गतिविधि-जैसा-दृश्य डिजाइन के आसपास केंद्रित है।

+5

बस उल्लेख करने के लिए, मैंने हाल ही में कुछ शानदार ऐप्स देखे हैं (उदाहरण के लिए पल्स) जो एक ही गतिविधि में अपने अलग-अलग दृश्यों के बीच एनिमेशन और चिकनी स्थानांतरण का उपयोग कर रहे हैं। – Danail

+2

मैं आपके साथ सहमत हूं लेकिन कई दृश्य प्रभाव केवल दृश्य संक्रमणों के बीच उपलब्ध हैं और उन गतिविधियों के बीच नहीं जो अहंकार और अच्छी कोडिंग – AsTeR

+0

के बीच उभरती हुई समस्या को चलाते हैं यह एक बेहद दिलचस्प विषय है। इस बिंदु पर मुझे एक ऐप है जो आखिरकार 4 विचारों को लागू करेगा। मैं इसे 1 गतिविधि के भीतर कर रहा हूं जिसके परिणामस्वरूप "मेगा गतिविधि" ने इस जवाब में कहा है। मैं मुख्य रूप से अपना ऐप देखने और इसे आईओएस समकक्ष की तरह महसूस करने के लिए कर रहा हूं। मैं इस बात से सहमत हूं कि यह उस पर निर्भर करता है जो आप पूरा करने की कोशिश कर रहे हैं। महान प्रश्न, और उत्तर +1 :-) – trumpetlicks

3

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

बस मेरी राय।

11

यह भी ध्यान रखें कि आपके ऐप को कई Activities के साथ कार्यान्वित करने से उपयोगकर्ता पूरी तरह से मंच के साथ अधिक सुसंगत अनुभव प्रदान करेगा। अनुभव का एक हिस्सा अंतर्निहित Google ऐप्स का उपयोग करके आकार दिया जाएगा, इसलिए उपयोगकर्ताओं को आपके एप्लिकेशन का उपयोग करके एक आसान समय होगा यदि यह फ़ोन पर पहले से इंस्टॉल किए गए लोगों के समान व्यवहार करता है।

2

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

+2

StackOverflowError बहुत अधिक जावा में होता है यदि आपके पास अनंत रिकर्सन है, तो आप OutOfMemoryError के बारे में सोच रहे हैं? एक जावा प्रोग्रामर के रूप में आपको वास्तव में चिंता नहीं करनी चाहिए कि कचरा कलेक्टर कब या कहाँ ट्रिगर होता है।एंड्रॉइड स्टैक ओवरफ्लो में – satur9nine

+2

तब होता है जब दृश्य पदानुक्रम भी बहुत गहरा होता है। – Danail

17

मैं कुछ उदाहरणों को इंगित करना चाहता हूं जब एक ही गतिविधि एक एंड्रॉइड एप्लिकेशन के लिए बेहतर डिज़ाइन हो सकती है

  • आवेदन स्क्रीन कसकर युग्मित और एक आम वस्तु है कि वे सभी पर काम कर रहे हैं साझा कर रहे हैं: एक से अधिक पूर्ण स्क्रीन दृश्य है। इस मामले में ऑब्जेक्ट के चारों ओर गुजरने के लिए बंडल की आवश्यकता हो सकती है और इसमें त्रुटि हो सकती है क्योंकि इसकी प्रतियां होंगी। एक अच्छा उदाहरण wizard हो सकता है। हां आप सामान्य ऑब्जेक्ट तक पहुंचने के लिए स्थिर का उपयोग कर सकते हैं लेकिन एंड्रॉइड में स्थैतिक खतरनाक हो सकता है (कॉन्फ़िगरेशन परिवर्तन सोचें!)

  • यदि आप स्क्रीन के बीच कुछ वाकई अच्छे एनिमेशन चाहते हैं। शायद आप एक पक्षी को एक स्क्रीन में ले जाना चाहते हैं और दूसरी स्क्रीन में जमीन लेना चाहते हैं। ऐसा करने का प्रयास करें जब प्रत्येक स्क्रीन एक गतिविधि है!

दूसरी तरफ यदि आपकी स्क्रीन में से कोई भी अन्य अनुप्रयोगों द्वारा दिखाया जाने वाला डिज़ाइन किया गया है तो यह स्क्रीन अपनी गतिविधि होनी चाहिए।

अद्यतन मार्च 2014:

इस बिंदु पर सवाल अब टुकड़े की पसंद को शामिल करना चाहिए। मुझे लगता है कि दृश्य शायद 3: गतिविधि, टुकड़ा, दृश्य की कम से कम संभावित पसंद हैं। यदि आप बैक बटन का उपयोग करने वाली स्क्रीन को कार्यान्वित करना चाहते हैं तो यह या तो सक्रियता या टुकड़े होना चाहिए क्योंकि दोनों बैक बटन को मूल रूप से संभालते हैं। टुकड़े टुकड़े करने के लिए टुकड़े टुकड़े करने के लिए टुकड़े टुकड़े करने के लिए टुकड़े टुकड़े करने की आवश्यकता होगी। टुकड़े, संवाद और बैक स्टैक का प्रबंधन हालांकि एक परेशानी का थोड़ा सा हो सकता है!

+0

फ्रैगमेंट्स के बारे में बात करने के लिए अद्यतन जोड़ने के लिए धन्यवाद। पूरी तरह से सहमत हैं कि फ्रैगमेंट बनाम गतिविधि का उपयोग करने के लिए आज महत्वपूर्ण विकल्प है। – ToolmakerSteve

4

दूसरों मैं दोनों के मिश्रण का उपयोग, उदाहरण के लिए से अलग,
1. वहाँ एक मुख्य मेनू जब आवेदन,
2. आप खोज पर क्लिक करें शुरू होता है गतिविधि खोज करने के लिए
3. तो फिर वहाँ है ले जाता है एक फिल्टर बटन, जो सिर्फ दृश्य को स्विच करता है और दिखाता है कि आप फ़िल्टर विकल्प
4. फ़िल्टर दृश्य के अंत में दो बटन हैं, आप "खोज" या "रद्द करें" दबाते हैं और आप फिर से खोज दृश्य पर वापस आते हैं (बिना स्विच किए गतिविधि)
5. अब यदि उपयोगकर्ता फोन बैक बटन हिट करता है तो उसे खोज फ़िल्टर विकल्पों के बजाय मुख्य मेनू पर वापस ले जाया जाता है। जो मुझे लगता है वह सही व्यवहार है।

इसका उपयोग करें जिस तरह से उपयोगकर्ता प्राकृतिक महसूस करेगा। और एक गतिविधि में सबकुछ रखने से यह जटिल हो जाएगा।

-1

मैं केवल एक गतिविधि वाले एप्लिकेशन पर काम कर रहा हूं, लेकिन मुझे विशेष रूप से मानचित्र खंड के साथ कई मुद्दों का सामना करना पड़ रहा है। क्या मैं सही तरीके से खंड को संभाल नहीं रहा हूं लेकिन मैं सुझाव दूंगा कि कई गतिविधि दृष्टिकोण बेहतर है।

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