android - दुविधा: फ्रैगमेंट बनाम क्रियाकलापों का उपयोग कब करें:




android-fragments android-activity (10)

मुझे पता है कि Activities को मेरे आवेदन की एक स्क्रीन का प्रतिनिधित्व करने के लिए डिज़ाइन किया गया है, जबकि Fragments को उनके अंदर एम्बेडेड तर्क के साथ पुन: प्रयोज्य यूआई लेआउट के रूप में डिज़ाइन किया गया है।

बहुत पहले नहीं, मैंने एक आवेदन विकसित किया क्योंकि उसने कहा था कि उन्हें विकसित किया जाना चाहिए। मैंने अपने आवेदन की एक स्क्रीन का प्रतिनिधित्व करने के लिए एक Activity बनाई और ViewPager या Google Maps लिए फ्रैगमेंट का उपयोग किया। मैंने शायद ही कभी एक ListFragment या अन्य यूआई बनाया है ListFragment कई बार पुन: उपयोग किया जा सकता है।

हाल ही में मैंने एक परियोजना पर ठोकर खाई जिसमें केवल 2 Activities , एक SettingsActivity Activities है और दूसरा मुख्य MainActivityMainActivity का लेआउट कई छिपे हुए पूर्ण स्क्रीन यूआई टुकड़ों के साथ पॉप्युलेट किया गया है और केवल एक दिखाया गया है। Acitivty तर्क में आवेदन की विभिन्न स्क्रीन के बीच कई FragmentTransitions हैं।

मुझे इस दृष्टिकोण के बारे में क्या पसंद आया क्योंकि यह एप्लिकेशन ActionBar का उपयोग करता है, यह बरकरार रहता है और स्क्रीन स्विचिंग एनीमेशन के साथ नहीं चलता है, जो Activity स्विचिंग के साथ होता है। यह उन स्क्रीन संक्रमणों को और अधिक धाराप्रवाह महसूस देता है।

तो मुझे लगता है कि मैं जो पूछ रहा हूं वह इस विषय के बारे में आपके वर्तमान विकास के तरीके को साझा करना है, मुझे पता है कि यह पहली बार एक राय आधारित प्रश्न की तरह दिख सकता है लेकिन मैं इसे एंड्रॉइड डिज़ाइन और आर्किटेक्चर प्रश्न के रूप में देखता हूं ... वास्तव में नहीं राय आधारित एक।

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

http://www.infoq.com/presentations/Android-Design/

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


आप उनमें से एक का उपयोग करने के लिए स्वतंत्र हैं।
असल में, आपको मूल्यांकन करना होगा कि आपके ऐप में सबसे अच्छा कौन सा है। इस बारे में सोचें कि आप कैसे व्यापार प्रवाह प्रबंधित करेंगे और डेटा वरीयताओं को कैसे स्टोर / प्रबंधित करेंगे।

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

याद रखें: क्या मुझे टुकड़ों का उपयोग करना चाहिए? मुझे क्यों नहीं चाहिए

सादर।


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

** केवल एक नई गतिविधि शुरू करें यदि यह मुख्य गतिविधि के लिए समझ में आता है और यह एक ही समय में खुला रहता है (एकाधिक विंडो के बारे में सोचें)।

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


गतिविधि पर एक fragment का एक बड़ा फायदा यह है कि, टुकड़े के लिए उपयोग किया जाने वाला कोड विभिन्न गतिविधियों के लिए उपयोग किया जा सकता है। इसलिए, यह अनुप्रयोग विकास में कोड की पुनः उपयोगिता प्रदान करता है।


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

  • ActionBar और मेनू: जब 2 खंड में अलग-अलग शीर्षक होते हैं, तो मेनू
    संभालना मुश्किल होगा। पूर्व: नया खंड जोड़ते समय, आप एक्शन बार शीर्षक बदल सकते हैं, लेकिन backstack से इसे पॉप करते समय पुराने शीर्षक को पुनर्स्थापित करने का कोई तरीका नहीं है। इस मामले के लिए आपको प्रत्येक टुकड़े में एक टूलबार की आवश्यकता हो सकती है, लेकिन मुझे विश्वास करने दो, जो आपको अधिक समय बिताएगा।
  • जब हमें startForResult आवश्यकता startForResult , गतिविधि में लेकिन टुकड़ा नहीं होता है।
  • डिफ़ॉल्ट रूप से संक्रमण एनीमेशन नहीं है

इसके लिए मेरा समाधान एक टुकड़े को लपेटने के लिए एक गतिविधि का उपयोग कर रहा है। तो हमारे पास अलग-अलग एक्शन बार, मेनू, startActivityForResult , एनीमेशन, ... है


मेरा दर्शन यह है:

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

गतिविधि संक्रमण महंगा हैं, है ना? कम से कम मुझे विश्वास है - चूंकि पुरानी गतिविधि को नष्ट / रोका / बंद कर दिया गया है, इसलिए ढेर पर धक्का दिया गया है और फिर नई गतिविधि को बनाया / शुरू / शुरू किया जाना है।

यह सिर्फ मेरा दर्शन है क्योंकि टुकड़े पेश किए गए थे।


मेरी राय में यह वास्तव में प्रासंगिक नहीं है। विचार करने के लिए महत्वपूर्ण कारक है

  1. आप यूआई के कुछ हिस्सों का पुन: उपयोग कैसे करेंगे (उदाहरण के लिए मेनू)
  2. टैबलेट के लिए ऐप भी है?

टुकड़ों का मुख्य उपयोग मल्टीपेन गतिविधियों का निर्माण करना है, जो टैबलेट / फोन उत्तरदायी ऐप्स के लिए इसे सही बनाता है।


मैं सभी मामलों में गतिविधि पर फ्रैगमेंट क्यों पसंद करता हूं।

  • गतिविधि महंगी है। टुकड़े टुकड़े में, विचार और संपत्ति राज्य अलग हो जाते हैं - जब भी एक टुकड़ा backstack में backstack , तो उसके विचार नष्ट हो जाएंगे। तो आप गतिविधि की तुलना में अधिक टुकड़े टुकड़े कर सकते हैं।

  • Backstack हेरफेर। FragmentManager साथ, सभी टुकड़ों को साफ़ करना आसान है, Fragments और आदि से अधिक डालें। लेकिन गतिविधि के लिए, यह उन चीजों में हेरफेर करने के लिए एक दुःस्वप्न होगा।

  • एक बहुत अनुमानित जीवन चक्र । जब तक मेजबान गतिविधि का पुनर्नवीनीकरण नहीं किया जाता है। बैकस्टैक में टुकड़े पुनर्नवीनीकरण नहीं किया जाएगा। तो FragmentManager::getFragments() को विशिष्ट टुकड़ा खोजने के लिए (प्रोत्साहित नहीं) का उपयोग करना संभव है।


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


विशेषज्ञ आपको बताएंगे: "जब मैं यूआई देखता हूं, तो मुझे पता चलेगा कि Activity या Fragment का उपयोग करना है या नहीं।" शुरुआत में इसका कोई अर्थ नहीं होगा, लेकिन समय पर, आप वास्तव में यह बताने में सक्षम होंगे कि आपको Fragment आवश्यकता है या नहीं।

एक अच्छा अभ्यास है जो मुझे मेरे लिए बहुत उपयोगी पाया। यह मेरे लिए हुआ जब मैं अपनी बेटी को कुछ समझाने की कोशिश कर रहा था।

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

लेकिन यह न भूलें कि आपको हमेशा एक बॉक्स कंटेनर ( Activity ) की आवश्यकता है या आपके हिस्से फैल जाएंगे। तो अंदर के हिस्सों के साथ एक बॉक्स।

ध्यान रखें कि बॉक्स का दुरुपयोग न करें। एंड्रॉइड यूएक्स विशेषज्ञ सलाह देते हैं (आप उन्हें YouTube पर पा सकते हैं) जब हमें स्पष्ट रूप से किसी अन्य Activity लोड करना चाहिए, बजाय Fragment का उपयोग करने के लिए (जैसे कि जब हम नेविगेशन ड्रॉवर के साथ सौदा करते हैं)। एक बार जब आप Fragments साथ सहज महसूस करते हैं, तो आप उनके सभी वीडियो देख सकते हैं। और भी वे अनिवार्य सामग्री हैं।

क्या आप अभी अपने यूआई को देख सकते हैं और पता लगा सकते हैं कि आपको Activity या Fragment आवश्यकता है या नहीं? क्या आपको एक नया परिप्रेक्ष्य मिला? मुझे लगता है तुमने किया था।


स्क्रीन के लिए fragment उपयोग के fragment लिए आधार प्रदान करने के लिए प्रति आवेदन एक गतिविधि का उपयोग करें, activites टुकड़ों की तुलना में fragments हल्के वजन होते हैं पुन: प्रयोज्य टुकड़े ऐप के लिए बेहतर अनुकूल होते हैं जो फोन और टैबलेट दोनों का समर्थन करते हैं





architecture