Android में प्रत्यक्ष आशय putExtra () के बजाय बंडल का उपयोग करने के लाभ


79

अपने Android एप्लिकेशन में मैं हमेशा नए के लिए किसी भी मूल्य को पास करने के लिए कक्षा के प्रत्यक्ष putExtra()फ़ंक्शन का उपयोग कर रहा हूं । ऐशे ही:IntentActivity

Intent i = new Intent(this, MyActivity.class);
i.putExtra(ID_EXTRA1, "1");
i.putExtra(ID_EXTRA2, "111");
startActivity(i);

मैं Bundleएंड्रॉइड के बारे में जानता हूं और मैंने देखा है कि लोग Bundleनए मूल्यों को पारित करने के लिए उपयोग कर रहे हैं Activity
ऐशे ही:

Intent intent = new Intent(this, MyActivity.class);
Bundle extras = new Bundle();
extras.putString("EXTRA_USERNAME","my_username");
extras.putString("EXTRA_PASSWORD","my_password");
intent.putExtras(extras);
startActivity(intent);

यहाँ मुझे 2 संदेह हैं। अगर मैं सीधे मानों को नया लगाकर
उपयोग Bundleकर सकता हूं तो मुझे इसका उपयोग क्यों करना चाहिए ? प्रत्यक्ष के बजाय उपयोग करने के क्या फायदे हैं ?ActivityIntent
BundleIntent putExtra()

जवाबों:


65

यह थोड़ा (यदि कोई अंतर है) बनाता है। एक अतिरिक्त बंडल का उपयोग करने वाला कोड थोड़ा भारी है (यह किसी भी व्यावहारिक अनुप्रयोग में कोई अंतर नहीं करेगा) और अधिक सामान्य होने के कारण प्रबंधन में थोड़ा आसान है।

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

[अपडेट करें]

एक स्पष्टीकरण (कुछ अन्य उत्तरों के कारण)।

अतिरिक्त है प्रत्येक आशय हो सकता है कैरी (लेकिन नहीं है), इसलिए वहाँ एक बंडल का उपयोग कर या इसे प्रयोग नहीं के बीच कोई विकल्प नहीं है कि एक अतिरिक्त बंडल। आप एक बंडल का उपयोग कर रहे हैं।

पहली बार जब आप उपयोग करते हैं putExtra, तो mExtrasइंटेंट के अंदर एक बंडल को इनिशियलाइज़ किया जाता है और सभी निम्नलिखित पुटक्स्ट्रा को इसे सौंप दिया जाता है। बंडल स्वयं आपके लिए दुर्गम है (यह कुछ प्रकार के कीड़ों से बचने के लिए डिज़ाइन द्वारा) है।

putExtras Intent के अंदर अपना बंडल नहीं डालता है । इसके बजाय, यह इसे वर्तमान इरादे बंडल पर कॉपी करता है (या जैसा भी बनाता है putExtra)। यही कारण है कि यह थोड़ा भारी है (आपके पास एक के बजाय दो बंडल हैं और नकल की कीमत का भुगतान करें)।

क्रूक्स है - यदि आप उपयोग करते हैं putExtras, तो आप अभी भी इरादे के अंदर असली बंडल तक नहीं पहुंच सकते हैं। लेकिन - आपके पास जो कुछ भी आप इसके साथ करना चाहते हैं उसके लिए एक प्रति है। जैसे किसी दूसरे इरादे में नकल करने के लिए इधर-उधर रहते हैं (यदि आप इसी तरह के बहुत से इरादे भेजते हैं)।


मुझे बताएं कि क्या मैं इस आशय इरादे की तरह एक कोड का उपयोग करता हूं = नया इरादा (यह, MyActivity.class); आशय .putExtra (ID_EXTRA1, "1"); बंडल एक्स्ट्रा = नया बंडल (); extras.putString ("EXTRA_USERNAME", "my_username"); extras.putString ("EXTRA_PASSWORD", "my_password"); आशय .putExtras (अतिरिक्त); startActivity (इरादा); मैं ID_EXTRA1
विशाल विजय

@VishalVijay आप getExtras को कॉल करके एक्स्ट्रा बंडल (मूल एक नहीं) की एक प्रति प्राप्त कर सकते हैं। सावधान, यह अशक्त लौट सकता है।
fdreger

इसलिए मैं नई गतिविधि रिग से ID_EXTRA1 और एक्स्ट्रा (बंडल) प्राप्त कर सकता हूं।
विशाल विजय

क्षमा करें, मैं इस प्रश्न के उत्तर से काफी कुछ नहीं बता सकता, लेकिन, अगर मेरा कोई इरादा है जो एक ValueObjects डेटा को संपादित करने के एकमात्र उद्देश्य के लिए है, तो मैं जो कुछ करता हूं वह सभी सूचकांक में पास होता है जिसमें VO को एक स्थैतिक डेटा का उपयोग करना है संसाधन। चूंकि यह अनिवार्य होना चाहिए startActivity(intent, options)या इसमें किया जाना चाहिए intent.putExtra()? मुझे पता है कि यह दोनों किया जा सकता है, लेकिन मैं सिर्फ सबसे अच्छा अभ्यास कर रहा हूं? मैं आमतौर पर onCreate को दिए गए बंडल को नहीं छूता, लेकिन मैं इतना अनुभवहीन हूं कि राय मांगता हूं।
13

putExtras (बंडल) मूल इरादे के लिए प्रतिनिधि नहीं है। मूल इरादे में एक अतिरिक्त है जो एक बंडल है।
लीना ब्रू

17

अतिरिक्त लाभ : एक बार एक बंडल में डेटा डालने के बाद, आप एक ही डेटा को कई इंटेंट्स के माध्यम से भेज सकते हैं। (केवल मामले में, कई इरादे भेजे जाने हैं)।


6

बंडल्स शांत हैं क्योंकि आप उनके निर्माण / रीडिंग को आसानी से अलग कर सकते हैं, इसलिए बंडल को संभालने वाले कोड को UI के कोड से अलग कर सकते हैं।

ज्यादातर मामलों में यह बेकार है क्योंकि आप डेटा की सबसे छोटी संभव राशि (आमतौर पर सिर्फ एक तार, एक आईडी ...) को प्रसारित करना चाहते हैं ...


5

आप आशय और बंड रिलेशन (स्टैकओवरफ़्लो) का उल्लेख कर सकते हैं और यह भी कि एंड्रॉइड प्रोग्राम (स्टैकवॉटरफ़्लो) में बंडल का क्या महत्व है

आप एक बंडल में कई या डेटा का गुच्छा भेज सकते हैं और इसे आशय के माध्यम से भेज सकते हैं। या एक और तरीका है PutExtra () के कई कथन जोड़ें।

और मेरे ज्ञान के अनुसार ऐसा कोई महत्वपूर्ण अंतर नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.