2014-04-08 9 views
7

पहली जगह में, इस सवाल का कुछ Android दिग्गजों के लिए वास्तव में बेतुका ध्वनि सकता है, लेकिन एक नौसिखिया होने के नाते, मैं वास्तव में इस प्रश्न को पूछने की जरूरत है:

एक Intent एक निष्क्रिय डेटा संरचना है कि एक दूसरे के लिए Activity से जानकारी वहन करता है। एक Intent नाम-मूल्य जोड़े के रूप में डेटा रखने में भी सक्षम है (putExtra() के माध्यम से)।

लेकिन onCreate() विधि को ओवरराइड करते समय हम पैरामीटर के रूप में Bundle पास करते हैं, जो अंततः नाम-मूल्य जोड़े के रूप में मूल्य रखता है और onSaveInstanceState() की सहायता से जानकारी संग्रहीत करने में सक्षम है।

ऐसे परिदृश्य में हमें दोनों की आवश्यकता क्यों है और दोनों को क्या अंतर है?

अद्यतन

मुझे लगता है मैं तुम्हें एक ग़लतफ़हमी है कि मैं गलत समझा है क्या एक Intent है में लोगों को मार्ग प्रशस्त किया है:

जब मैंने कहा कि "एक Intent एक निष्क्रिय डेटा संरचना है कि एक Activity से जानकारी वहन करती है दूसरे के लिए ", जो मैं इंगित करना चाहता था वह यह भी था कि IntentputExtra() विधि की सहायता से जानकारी (संदर्भ और कार्रवाई विवरण के अलावा) ले जा सकता है। हमें Bundle का उपयोग करने की आवश्यकता क्यों है?

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

+0

इसे पढ़ें http://stackoverflow.com/questions/4999991/what-is-a-bundle-in-an-android-application#autocomment35012928 – user

+0

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

उत्तर

3

मैं वास्तव में से है जहाँ आप Intent के लिए इस परिभाषा मिल गया पता नहीं है, लेकिन एक 'आशय' परिभाषा

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

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

तो आशय नई (गतिविधि, सेवा, BroadCastReceiver)

Intent में आप अतिरिक्त

एक्स्ट्रा कलाकार के लिए एक परिभाषा मिल जाएगा से जोड़ने के लिए एक क्रिया है - यह एक बंडल है किसी भी अतिरिक्त जानकारी के। इसका उपयोग घटक को विस्तारित जानकारी प्रदान करने के लिए किया जा सकता है। उदाहरण के लिए, यदि हमारे पास ई-मेल संदेश भेजने की कोई कार्रवाई है, तो हम विषय, शरीर इत्यादि की आपूर्ति के लिए यहां डेटा के अतिरिक्त टुकड़े भी शामिल कर सकते हैं।

तो इसका मतलब है कि आशय में अतिरिक्त एक बंडल

का एक उद्देश्य Bundle के लिए जा रहे के रूप में आप यह एक दूसरे के लिए आशय से डेटा के लिए एक वाहक है और Key-Value चर का एक नक्शा है उल्लेख किया है।

+0

कृपया प्रश्न को फिर से पढ़ें और वापस लाएं। मैंने विवरण अपडेट किया है। – ikartik90

+0

मेरे अपडेट्स को चेक करें –

+0

लेकिन फिर 'putExtra() '' intent' का रिटर्न प्रकार क्यों नहीं है और' बंडल' नहीं है? थोड़ी देर के लिए कृपया मेरे मूर्ख प्रश्नों को शांत करें और मुझे जवाब दें। धन्यवाद। – ikartik90

4

मुझे लगता है कि आप पहले ही समझ चुके हैं कि Bundle क्या है: कुंजी-मूल्य जोड़े का संग्रह।

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

एक बंडल के रूप में इरादे के बारे में सोचें जिसमें निहित डेटा प्राप्त करना चाहिए और यह कैसे प्रस्तुत किया जाना चाहिए, इस बारे में जानकारी भी शामिल है।

+0

प्रश्न अपडेट किया गया। पहले अनुचित विवरण के लिए खेद है। आपके उत्तर के लिए आ रहा है, लेकिन मैं यही पूछना चाहता हूं- "हमें 'बंडल' की आवश्यकता क्यों है जब हमारे पास पहले से ही 'इरादे' के साथ उपलब्ध सुविधाएं हों?" – ikartik90

+2

क्योंकि आपको कभी-कभी कुंजी-मूल्य जोड़े के संग्रह की आवश्यकता होती है, जिनके पास पूर्व-परिभाषित संकेत नहीं है, जिनके इरादे के क्षेत्र हैं। आपको अक्सर किसी ऐसे स्थान पर शब्दकोश की आवश्यकता होती है जहां यह कोई कार्रवाई शुरू करने से संबंधित नहीं है किसी भी तरह से। –

3

इरादे घटकों के बीच संचार की सुविधा प्रदान करता है। इंटेंट वह संदेश है जो गतिविधि जैसे घटकों के बीच पारित होता है। एक और गतिविधि में

Bundle bundle=new Bundle(); 
bundle.put(key,value); 
intent.putExtra(bundle); 
startActivity(intent); 

कॉल बंडल: कि intent.putExtra (कुंजी, मूल्य) और intent.putExtra (बंडल) इस्तेमाल किया जा सकता

Intent intent = new Intent(); 

intent.setClass(this, Other_Activity.class); 
// intent.putExtra(key,value) 
intent.putExtra("EXTRA_ID", "SOME DATAS"); 
startActivity(intent); 

बंडल का उपयोग करना :

Bundle extras=getIntent().getExtras(); 
extras.getString(key); 
2

के स्रोत से वर्ग, वास्तव में दोनों के बीच कोई अंतर नहीं है। आशय वर्ग से नीचे दिए गए कोड की जाँच करें:

public Intent putExtra(String name, String value) { 
     if (mExtras == null) { 
      mExtras = new Bundle(); 
     } 
     mExtras.putString(name, value); 
     return this; 
    } 

और

public Intent putExtras(Bundle extras) { 
     if (mExtras == null) { 
      mExtras = new Bundle(); 
     } 
     mExtras.putAll(extras); 
     return this; 
    } 

तो मुझे लगता है, फर्क सिर्फ इतना है उपयोग की आसानी है .. :) 1 के लिए, आप अपने समूह बनाने की सुविधा की जरूरत नहीं है स्पष्ट रूप से।

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