2013-02-02 31 views
42

किसी ने मुझसे को यह व्याख्या कर सकते हैं करें:एंड्रॉयड आशय प्रसंग भ्रामक

Intent intent = new Intent(Context, AlarmReceiver.class); 

मैं समझ गया कभी नहीं और मैं गंभीरता से लगता है कि मैं कभी नहीं किसी गहराई में मुझे यह समझाने की कोशिश नहीं कर पाए। यह पूरी संदर्भ बात मेरे लिए इतनी उलझन में है। कभी कभी यह इस तरह काम करता है:

Intent intent = new Intent(getBaseContext(), AlarmReceiver.class); 

कभी कभी यह अभ्यस्त इस तरह काम लेकिन यह केवल स्वीकार करता है:

Intent intent = new Intent(context, AlarmReceiver.class); 

कभी कभी अपनी:

Intent intent = new Intent(this, AlarmReceiver.class); 

आदि आदि और कई अन्य।

मैं संदर्भ की मूल बातें समझता हूं लेकिन कितने हैं? और ग्रहण मुझे एक बार एक बार और दूसरी बार एक त्रुटि क्यों फेंक देता है? हमें कभी-कभी संदर्भ घोषित करने की आवश्यकता क्यों होती है? :

Context context; 

मैं सभी स्थितियों के लिए सही संदर्भ नहीं ढूंढ पा रहा हूं, मुझे कैसे पता चलेगा कि हर स्थिति में सही क्या है?

उत्तर

56

सबसे पहले, मुझे बताएं कि the context थोड़ा बेहतर है, तो चलिए इसे कैसे इस्तेमाल और प्राप्त किया जा सकता है। अनिवार्य रूप से, संदर्भ आपके संसाधनों को आपके प्रोग्राम से जोड़ने का एक संदर्भ है। प्रत्येक ऑब्जेक्ट को अपना स्वयं का संदर्भ दिया जाता है, जिसमें उस ऑब्जेक्ट को सेट करने के लिए आवश्यक संसाधन होते हैं। अन्य उद्देश्यों के साथ, कई वस्तुओं को बनाने के लिए, और प्रोग्राम की पहचान जानकारी प्राप्त करने के लिए आवश्यक है। यह नए विचारों और गतिविधियों को स्थापित करने के लिए अमूल्य बनाता है, लेकिन इसका उपयोग अन्य उद्देश्यों के लिए भी किया जा सकता है। अधिक जानकारी के लिए this answer देखें।

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

बस आपको कुछ उदाहरण देने के लिए:

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

View संदर्भ का वारिस नहीं करता है। हालांकि, इसमें एक विधि getContext() है। यदि आपको किसी दृश्य से संदर्भ प्राप्त करने की आवश्यकता है, तो इसे प्राप्त करने का यह तरीका है। यह संदर्भ पूरा नहीं होगा, लेकिन केवल दृश्य की सामग्री के लिए संदर्भ होगा।

Fragments भी संदर्भ प्राप्त नहीं करता है। उनमें एक विधि getActivity() है, जो कि अगर टुकड़ा सक्रिय है, तो गतिविधि वापस कर देगा, जो टुकड़े के लिए संदर्भ है।

BroadcastReceivers या तो संदर्भ का वारिस नहीं है। वास्तव में, उनमें बिल्कुल संदर्भ नहीं होता है, लेकिन जब कोई ईवेंट प्राप्त होता है (onReceive(Context context, Intent intent))

+1

ब्रॉडकास्ट रिसीवर क्लास विधि के बारे में क्या? यह किस तरह का संदर्भ लेता है क्योंकि मुझे उपयुक्त नहीं मिल सकता है? – user1880779

+1

ठीक है, मैंने इसे भी मेरे उत्तर में जोड़ा है। – PearsonArtPhoto

+0

उत्तर देने के लिए धन्यवाद, ठीक है मेरे पास ब्रॉडकास्ट रिसीवर क्लास में एक विधि है, उस विधि में मैं कोशिश कर रहा हूं: 'इरादा इरादा = नया इरादा (, अलार्म रिसीवर.क्लास);', सही संदर्भ नहीं मिल सकता है – user1880779

5

संदर्भ के माध्यम से जो मैं समझता हूं वह पर्यावरण है। सरल शब्दों में संदर्भ किसी भी चीज का परिवेश है इसलिए जब आप किसी भी प्रकार के संदर्भ का उपयोग कर रहे हैं तो आपको यह तय करना होगा कि उन चीज़ों के आस-पास क्या होना चाहिए जिनके लिए आप संदर्भ का उपयोग कर रहे हैं।

उदाहरण के लिए यदि आप एप्लिकेशन के माध्यम से कुछ डेटा या फ़ील्ड रहना चाहते हैं तो आपको इसे एप्लिकेशन क्लास में परिभाषित करना चाहिए।

अब जब आप अपने आवेदन के अपने किसी भी घटक में आवेदन संदर्भ प्राप्त करते हैं, तो इस क्षेत्र में आपने जो आवेदन कक्षा में घोषित किया है, वह आपके संदर्भ में होगा। अगर आप इसे एक्सेस कर सकते हैं।

सभी संदर्भ प्रकार के लिए भी सही है।

यदि आप कभी भी "इस" संदर्भ का उपयोग करके सेवा घटक में alertDialog का उपयोग करने का प्रयास करते हैं। इसे आज़माएं और मैं शर्त लगाता हूं कि आप निश्चित रूप से अपवाद प्राप्त करेंगे क्योंकि "यह" सेवा के पर्यावरण का प्रतिनिधित्व करते समय इसका उपयोग करता है। और जैसा कि यह पृष्ठभूमि है घटक हम उसमें खिड़की नहीं जोड़ सकते हैं। यह आपको खराब टोकन अपवाद बताएगा। जिसका मतलब आसपास के दृश्य के लिए जेनरेट किया गया टोकन प्रदर्शित करने के लिए सतर्क Dialog के लिए उचित नहीं है।

आशा है कि यह आपको संक्षिप्त जानकारी देता है कि आप क्या चाहते हैं।

4

प्रसंग क्षमताओं

सामान्य क्रियाओं आप सुरक्षित रूप से किसी दिए गए संदर्भ वस्तु के साथ ले जा सकते हैं यह जहां मूल रूप से आया है पर निर्भर करता है। नीचे आम जगहों एक आवेदन एक संदर्भ प्राप्त होगा की एक तालिका है, और प्रत्येक मामले में यह क्या के लिए उपयोगी है:

enter image description here

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

मूल लेख here

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