2012-02-01 20 views
13

के ऑनसेसिव() में एंड्रॉइड द्वारा पारित संदर्भ क्या है जब मैं ब्रॉडकास्ट रिसीवर को तुरंत चालू करता हूं और जब एंड्रॉइड फ्रेमवर्क द्वारा ऑनसेसिव() को कॉल किया जाता है, तो संदर्भ संदर्भ() विधि पर संदर्भ क्या होता है? क्या यह एक गतिविधि संदर्भ है? एक आवेदन संदर्भ के?ब्रॉडकास्ट रिसीवर

धन्यवाद।

उत्तर

7

यह एक एप्लिकेशन संदर्भ है।

public abstract void onReceive (Context context, Intent intent) 
+11

यह एक एप्लिकेशन संदर्भ हो सकता है, लेकिन यह उस संदर्भ का एक प्रतिबंधित संस्करण है। 'संदर्भ' के लिए एंड्रॉइड स्रोत कोड में इसे 'रिसीवर रेस्ट्रिक्टेड कॉन्टेक्स्ट' के रूप में जाना जाता है और यह संदर्भ कुछ रजिस्टर जैसे 'रजिस्टर रिसीवर() 'और' बाइंड सर्विस()' की अनुमति नहीं देता है। यदि आपको वास्तव में 'ऑनसेसिव()' में एक एप्लिकेशन संदर्भ की आवश्यकता है तो आपको 'context.getAplicationContext() ' –

+0

@ coder_For_Life22 कॉल करने की आवश्यकता है किस एप्लिकेशन का संदर्भ? प्रसारित करने वाला प्रसारण या एप्लिकेशन भेजने वाला एप्लिकेशन? – Bhargav

0

यह संदर्भ है जिसमें रिसीवर चल रहा है। उदाहरण के लिए, यदि प्रसारण संदेश UsbManager से है, तो संदर्भ UsbManager का संदर्भ है।
और जानकारी: BroadcastReceiver

+0

यह समझ में नहीं आता है। यह संदर्भ उस संदर्भ के बारे में अधिक होने की संभावना है जिस पर रिसीवर पंजीकृत था, जिसने प्रसारण * भेजा * के संदर्भ के बजाय। UsbManager के साथ आपका उदाहरण आपके ऐप के बाहर एक (सिस्टम) घटक से प्रसारण का सुझाव देता है; अगर आपके रिसीवर को किसी अन्य ऐप के संदर्भ में बुलाया गया तो यह समझ में नहीं आता है ... – JHH

0

ऐतिहासिक, यह ReceiverRestrictedContext का एक उदाहरण है, लेकिन इस वर्ग के हाल के Android संस्करण में चला गया है (नहीं जो एपीआई स्तर वास्तव में करते हैं, लेकिन यह एपीआई 26 सूत्रों में मौजूद नहीं है), यह है, इसलिए अब आपका आवेदन संदर्भ होना चाहिए।

ReceiverRestrictedContextBroadcastReceiver से BroadcastReceiver पंजीकृत करने से रोका।

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

आप सुरक्षित रूप से getApplicationContext() पर कॉल कर सकते हैं और इसके परिणामस्वरूप लंबे समय तक रहने वाले घटक को पास कर सकते हैं।

ध्यान दें कि तथ्य ReceiverRestrictedContext हाल के एंड्रॉइड संस्करणों से चला गया है इसका मतलब यह नहीं है कि आप "BroadcastReceiverCeption" बना सकते हैं!

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