2017-07-03 22 views
5

मेरे पास एक बहुत ही सामान्य सवाल है, मुझे अपने प्रश्न के लिए ठोस जवाब नहीं मिला इसलिए इसे फिर से डाला गया।एकाधिक गतिविधि या एकल गतिविधि और एकाधिक टुकड़े

मैं दो दृष्टिकोण

के बीच तय करना चाहते हैं
  1. विभिन्न विभिन्न स्क्रीन और कार्य जटिलता से बचने के लिए और मुद्दों
  2. एकल गतिविधियों और विभिन्न कार्यों और उपयोगकर्ता के लिए कई टुकड़े पकड़े गतिविधि की तरह नेविगेट कर सकते हैं टुकड़ा एक के लिए समर्पित गतिविधियों उपयोगकर्ता फ्रैगमेंट बी, फ्रैगमेंट सी पर नेविगेट करेगा, यह आगे और आगे लेनदेन हो सकता है।

मैं क्या जानना चाहता हूं?

  1. क्या गतिविधि संक्रमण प्रोसेसर के लिए महंगा है या सादगी मेमोरी ओवरहेड प्राप्त करने के लिए नगण्य है?
  2. टुकड़े के संक्रमण के साथ जीवन चक्र के प्रबंधन का उपर है, तो इस जीवन चक्रवात प्रबंधन के साथ क्या समस्या आ सकती है?
  3. खंड की बचत स्थिति के साथ खंड लेनदेन से निपटना कितना आसान है?

हम अभी नहीं जानते कि टुकड़े के लिए कितना डेटा होगा।

+0

जैसा कि मुझे पता है कि टुकड़े का एक उपयोग यह है कि आप इसे कोड के decoupling के लिए उपयोग कर सकते हैं इस प्रकार गतिविधि को विशाल होने से रोकते हैं। और कोड को बनाए रखने और इसे सरल रखने के लिए यह महत्वपूर्ण है। रिसाव को रोकने के लिए –

उत्तर

1

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

मान लीजिए, एक उदाहरण,

लेने मैं हर गतिविधि में 10 क्रियाएँ है, मैं कुछ पृष्ठभूमि कार्रवाई करने Async टास्क फोन कर रहा हूँ। प्रत्येक Async कार्य के onPostExecute() में आप अपना यूआई अपडेट कर रहे हैं। लेकिन doInBackground() को पूरा करने से पहले आपने गतिविधि को स्विच किया है और वह गतिविधि नष्ट हो गई है, लेकिन याद रखें कि doInBackground() अभी भी प्रगति पर है, और एक बार यह समाप्त हो जाने पर, पोस्टस्टेक्स्यूट पर कॉल किया जाएगा, और पोस्टस्टेक्सक्यूट() में हम यूआई अपडेट कर रहे हैं, लेकिन गतिविधि नष्ट हो गई है, इसलिए यह आपके ऐप में रिसाव बनाएगा। लेकिन यदि आप केवल एक गतिविधि बनाए रखते हैं तो इसे बनाए रखना आसान होगा।

दूसरों की राय के लिए भी प्रतीक्षा कर रहा है।

+0

हालांकि आप async कार्य लोडर का उपयोग कर सकते हैं। और केवल उस रिसाव के कारण आप टुकड़े का उपयोग कर रहे हैं तो आपको लोडर भी आज़माएं। वे एसिंक कार्य –

+0

से अधिक कुशल हैं मैंने अभी एक उदाहरण दिया है, मैं भी भ्रम में हूं जिसका उपयोग करना है। यदि हम टुकड़ों का उपयोग करते हैं, तो GPU ओवरड्रा अधिक होगा, लेकिन गतिविधि में, GPU ओवरड्रा कम होगा, जैसा कि मुझे लगता है ... तो देखें कि बहुत सारे पेशेवर और विपक्ष हैं। – Shekhar

4

अच्छा, यह पूरी तरह से एप्लिकेशन के डिज़ाइन, प्रवाह और इसकी नेविगेशन पर निर्भर करता है।

  1. प्रदर्शन टुकड़ा लेनदेन नई गतिविधियों बनाने की तुलना में तेजी से कर रहे हैं:

    यहाँ एकल गतिविधि और कई टुकड़े का उपयोग करने के कुछ फायदे भी हैं।

  2. नेविगेशन ड्रॉवर और टूलबार, एकल गतिविधि के साथ प्रबंधित करना आसान है।
  3. वही संदर्भ हर जगह इस्तेमाल किया जा सकता है।
  4. फ्रैगमेंट का सेटरेटिन इंस्टेंसेशन अभिविन्यास परिवर्तनों के प्रबंधन के दौरान बहुत उपयोगी है।
इसके साथ

, यहाँ कुछ कमियां आता है:

  1. गतिविधि कोड का एक बहुत से वास्तव में गंदा हो जाता है।
  2. हैंडलिंग बटन बैकप्रेस थकाऊ है क्योंकि केवल गतिविधि ही संभाल नहीं सकती है।

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

+0

हम फ्रैगमेंट में बैकप्रेस() को भी संभाल सकते हैं। एक अलग वर्ग बनाएं, FragmentBackHelper, यह टुकड़ा बढ़ाएगा, और IOnBackPressed लागू करेगा। अब IOnBackPressed में अलग इंटरफ़ेस नाम बनाएं, और इस कोड का उपयोग करें। सार्वजनिक इंटरफ़ेस IOnBackPressed { बूलियन ऑनबैकप्रेस(); } । अब जहां भी आप बैकप्रेस() पर हैंडल करना चाहते हैं, बस इस कक्षा का विस्तार करें। "FragmentBackHelper"। – Shekhar

+0

बडी, फ्रैगमेंट क्लास में ऑनबैकप्रेस() विधि कहां है, आप इंटरफ़ेस को कार्यान्वित करके फ्रैगमेंट्स में कस्टम विधियां बना सकते हैं लेकिन आखिरकार यह गतिविधि के ऑनबैक से ट्रिगर किया जाएगा, है ना? – Ani

+0

हां, इसके उपयोग के साथ, हम ऑनबैकप्रेस() को सही तरीके से संभाल सकते हैं? मुझे पता है कि यह गतिविधि की ऑनबैक प्रेस का आह्वान करेगा, लेकिन फिर भी हम जो भी करना चाहते हैं हम उस पर बैकप्रेस(), सही कर सकते हैं? अगर मैं गलत हूं तो मुझे समझने में सहायता करें। – Shekhar

1

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

  • यदि आप बड़े स्क्रीन आकार का समर्थन कर रहे हैं, तो टुकड़ों को निश्चित रूप से गतिविधियों पर प्राथमिकता दी जाती है।
  • जब आप कुछ कोड है जो आपको लगता है एकाधिक स्क्रीन में पुन: प्रयोज्य हो सकता है, तो आप "एकल गतिविधि कई टुकड़े के समर्थन में जोड़ने के लिए एक टुकड़ा जो अलग-अलग स्थानों
0

एक छोटा सा बिंदु भर में पुन: उपयोग किया जा सकता है का उपयोग कर सकते "।

कभी-कभी आपको अपने ऐप के विभिन्न पृष्ठों/स्क्रीन के बीच बने रहने के लिए एक घटक (उदाहरण के लिए बैनर विज्ञापन) की आवश्यकता हो सकती है। यदि आपके पास एकाधिक Activities हैं, तो आपको Activities में से प्रत्येक पर उस घटक को फिर से बनाना होगा। लेकिन अगर आपके पास Activity है, तो आप उस घटक को गतिविधि लेआउट में जोड़ दें और इसके बारे में भूल सकते हैं।

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