5

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

मेरा एप्लिकेशन उपयोगकर्ताओं को प्रमाणित करता है और फिर उसे आईडी के आधार पर विभिन्न प्रश्नों को करना होगा। गतिविधियों के बीच युग्मन को कम करने के लिए, मुझे लगता है कि बस आईडी को बंडल में जोड़ना होगा, और उसके बाद प्रत्येक गतिविधि क्वेरी को जिस जानकारी की आवश्यकता है, उसे सर्वश्रेष्ठ शर्त होगी; हालांकि प्रतिक्रिया को बढ़ाने के लिए, मैं निरंतर जानकारी स्टोर करने के लिए एक सिंगलटन कक्षा का उपयोग करने की दिशा में झुका रहा था, आवश्यकता से अधिक प्रश्नों को रोक रहा था।

उत्तर

7

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

Here are some more details। यदि आप इस पथ पर जाते हैं, तो आप डेटा को स्टोर/पुनर्प्राप्त करने और उस पर संचालन करने के लिए अपने एप्लिकेशन एक्सटेंशन में कोई भी गेटर/सेटर (या अन्य) विधि जोड़ सकते हैं। खासकर उत्तरार्द्ध गतिविधियों के बीच आगे और आगे Bundle का उपयोग करते समय प्रबंधन (और लगातार बनाए रखने) के लिए काफी दर्द हो सकता है। यदि केवल Bundle का उपयोग किया जाता है, तो गतिविधि प्रवाह में पड़ोसियों के एक या दो स्थानों में डेटा की आवश्यकता होती है और पर किसी भी (जटिल) संचालन की आवश्यकता नहीं होती है।

+0

धन्यवाद एमएच, निश्चित रूप से जाने के मार्ग की तरह लगता है। –

+0

क्षमा करें, मैंने इस प्रतिक्रिया को जल्द ही सही उत्तर के रूप में चिह्नित नहीं किया है! –

+1

आवेदन करते समय इस निरंतर जानकारी की स्थिति को बहाल करने के लिए कोई सुझाव मारे गए/पुनरारंभ किए गए हैं? इस डेटा को सहेजने के लिए कोई कॉलबैक नहीं है, इसलिए केवल एक चीज जिसे मैं सोच सकता था उसे साझा किया गया था साझाकरण पर। –

0

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

1

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

1

आपके लिए जाने का बेहतर तरीका उपयोगकर्ता को रखने के लिए साझा किए गए संदर्भों का उपयोग करना है ID आपको रखने और पुन: उपयोग करने की आवश्यकता है। बेशक आप सिंगलटन दृष्टिकोण या यहां तक ​​कि एप्लिकेशन क्लास का उपयोग कर सकते हैं, लेकिन आवेदन मारे जाने के बाद डेटा खो जाएगा।

0

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

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