एंड्रॉइड प्रोग्रामिंग में, वास्तव में एक Context
वर्ग क्या है और इसका उपयोग किस लिए किया जाता है?
मैं डेवलपर साइट पर इसके बारे में पढ़ता हूं , लेकिन मैं इसे स्पष्ट रूप से समझने में असमर्थ हूं।
एंड्रॉइड प्रोग्रामिंग में, वास्तव में एक Context
वर्ग क्या है और इसका उपयोग किस लिए किया जाता है?
मैं डेवलपर साइट पर इसके बारे में पढ़ता हूं , लेकिन मैं इसे स्पष्ट रूप से समझने में असमर्थ हूं।
जवाबों:
इसे सीधे शब्दों में कहें:
जैसा कि नाम से पता चलता है, यह अनुप्रयोग / वस्तु की वर्तमान स्थिति का संदर्भ है। यह नव निर्मित वस्तुओं को समझने देता है कि क्या चल रहा है। आमतौर पर आप इसे अपने कार्यक्रम के दूसरे भाग (गतिविधि और पैकेज / अनुप्रयोग) के बारे में जानकारी प्राप्त करने के लिए कहते हैं।
आप लागू द्वारा संदर्भ प्राप्त कर सकते हैं getApplicationContext()
, getContext()
, getBaseContext()
या this
(जब एक वर्ग है कि तक फैली हुई है में Context
, इस तरह के आवेदन, गतिविधि, सेवा और IntentService वर्ग के रूप में)।
संदर्भ के विशिष्ट उपयोग:
नई वस्तुएं बनाना: नए विचार, एडेप्टर, श्रोता बनाना:
TextView tv = new TextView(getContext());
ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);
मानक सामान्य संसाधनों तक पहुँच : LAYOUT_INFLATER_SERVICE, SharedPreferences जैसी सेवाएँ:
context.getSystemService(LAYOUT_INFLATER_SERVICE)
getApplicationContext().getSharedPreferences(*name*, *mode*);
एक्सेसिंग घटकों का निहितार्थ : सामग्री प्रदाताओं, प्रसारण, आशय के बारे में
getApplicationContext().getContentResolver().query(uri, ...);
context.getSystemService(LAYOUT_INFLATER_SERVICE)
, कहाँ और कैसे context
परिभाषित किया गया है?
पर्सन-एक्स एक स्टार्ट-अप सॉफ्टवेयर कंपनी के सीईओ हैं।
कंपनी में एक लीड आर्किटेक्ट मौजूद है, यह लीड आर्किटेक्ट कंपनी में सभी काम करता है जिसमें डेटाबेस, यूआई आदि शामिल होते हैं।
अब सीईओ एक नया डेवलपर काम पर रखता है।
यह आर्किटेक्ट है जो नए व्यक्ति के कौशल के आधार पर नए काम पर रखने वाले व्यक्ति की जिम्मेदारी बताता है कि वह डेटाबेस या यूआई आदि पर काम करेगा या नहीं।
यह ऐप के संसाधन के लिए एंड्रॉइड गतिविधि की पहुंच की तरह है।
यह उसी तरह है जब आप किसी होटल में जाते हैं, आप उचित समय में नाश्ता, दोपहर का भोजन और रात का खाना चाहते हैं?
ठहरने के दौरान आपको और भी कई चीजें पसंद होती हैं। आपको ये चीजें कैसे मिलती हैं?
आप रूम-सर्विस वाले से ये चीजें आपके लिए लाने के लिए कहते हैं।
यहां रूम-सर्विस व्यक्ति वह संदर्भ है जिस पर विचार करते हुए कि आप एकल गतिविधि हैं और होटल आपका ऐप है, अंत में नाश्ता, दोपहर का भोजन और रात का खाना संसाधनों का होना चाहिए।
संदर्भ में शामिल चीजें हैं:
इसका वर्णन करने का एक और तरीका: टीवी में चैनल और चैनल के रिमोट के रूप में संदर्भ पर विचार करें, इंटेंस आदि का उपयोग करते हुए संसाधन, सेवाएं, - - - यहां दूरस्थ सभी अलग-अलग संसाधनों तक पहुंच प्राप्त करने के लिए एक पहुंच के रूप में कार्य करते हैं।
इसलिए, रिमोट का उपयोग संसाधनों, सेवाओं, इंटेंट आदि का उपयोग करने जैसे चैनलों तक पहुंच है ...।
इसी तरह ... जिसके पास प्राकृतिक रूप से रिमोट का उपयोग होता है, उसके पास संसाधनों, सेवाओं, इंटेंट्स आदि का उपयोग करने जैसी सभी चीजें होती हैं
विभिन्न विधियाँ जिनके द्वारा आप संदर्भ प्राप्त कर सकते हैं
getApplicationContext()
getContext()
getBaseContext()
this
(जब गतिविधि वर्ग में)उदाहरण:
TextView tv = new TextView(this);
कीवर्ड this
वर्तमान गतिविधि के संदर्भ को संदर्भित करता है।
getApplicationContext()
, getContext()
, getBaseContext()
..... इस संदर्भ लें -> ( stackoverflow.com/a/10641257 )
SomeActivityName.this
। एक उदाहरण के लिए एक सूत्र में, this
तेह धागा को संदर्भित करता है और नहीं गतिविधि
Android में प्रसंग का विषय कई लोगों को भ्रमित करने वाला लगता है। लोगों को बस पता है कि एंड्रॉइड में बुनियादी चीजों को करने के लिए प्रसंग की बहुत आवश्यकता है। लोग कभी-कभी घबराते हैं क्योंकि वे कुछ ऑपरेशन करने की कोशिश करते हैं जिनके लिए कॉन्सेप्ट की आवश्यकता होती है और वे नहीं जानते कि कैसे सही कॉन्सेप्ट को "प्राप्त" किया जाए। मैं Android में Context के विचार को ध्वस्त करने का प्रयास करने जा रहा हूं। मुद्दे का एक पूर्ण उपचार इस पोस्ट के दायरे से परे है, लेकिन मैं एक सामान्य अवलोकन देने की कोशिश करूंगा ताकि आपको समझ में आ जाए कि संदर्भ क्या है और इसका उपयोग कैसे किया जाए। यह समझने के लिए कि संदर्भ क्या है, आइए स्रोत कोड पर एक नज़र डालें:
वास्तव में प्रसंग क्या है?
ठीक है, दस्तावेज़ीकरण स्वयं को एक सरल व्याख्या प्रदान करता है: संदर्भ वर्ग "एक अनुप्रयोग वातावरण के बारे में वैश्विक जानकारी के लिए इंटरफ़ेस" है।
प्रसंग वर्ग को ही सार वर्ग के रूप में घोषित किया गया है, जिसका कार्यान्वयन Android OS द्वारा प्रदान किया गया है। प्रलेखन आगे प्रदान करता है कि कॉन्टेक्ट "... एप्लिकेशन-विशिष्ट संसाधनों और कक्षाओं तक पहुंच के साथ-साथ एप्लिकेशन-स्तरीय संचालन जैसे लॉन्चिंग गतिविधियों, प्रसारण और इंटेंस प्राप्त करने, आदि के लिए कॉल करता है"।
आप बहुत अच्छी तरह से समझ सकते हैं, अब, क्यों नाम प्रसंग है। ऐसा इसलिए है क्योंकि यह सिर्फ इतना है। एक गतिविधि, सेवा, या किसी अन्य घटक के लिए, यदि आप चाहें, तो लिंक या हुक प्रदान करता है, जिससे इसे सिस्टम से जोड़ा जा सकता है, जिससे वैश्विक अनुप्रयोग पर्यावरण तक पहुंच हो सकती है। दूसरे शब्दों में: संदर्भ "आम तौर पर ऐप के संबंध में नरक मैं कहां हूं और बाकी एप्लिकेशन के साथ मैं कैसे पहुंच / संवाद करता हूं?" यदि यह सब थोड़ा भ्रमित करने वाला लगता है, तो प्रसंग वर्ग द्वारा बताए गए तरीकों पर एक त्वरित नज़र इसके वास्तविक स्वरूप के बारे में कुछ और सुराग प्रदान करता है।
यहाँ उन तरीकों का एक यादृच्छिक नमूना है:
getAssets()
getResources()
getPackageManager()
getString()
getSharedPrefsFile()
इन सभी तरीकों में क्या आम है? वे सभी सक्षम हैं जिनके पास संदर्भ तक पहुंच है, वे एप्लिकेशन-वाइड संसाधनों तक पहुंचने में सक्षम हैं।
संदर्भ, दूसरे शब्दों में, उस घटक को हुक करता है, जिसका अनुप्रयोग के बाकी वातावरण में संदर्भ होता है। उदाहरण के लिए, आपकी परियोजना में संपत्ति ('संपत्ति' फ़ोल्डर), उदाहरण के लिए, आवेदन भर में उपलब्ध हैं, बशर्ते कि एक गतिविधि, सेवा या जो कुछ भी जानता है कि उन संसाधनों का उपयोग कैसे किया जाए। उसी के लिए जाता है, getResources()
जो उन चीजों को करने की अनुमति देता है, getResources().getColor()
जो आपको colors.xml
संसाधन में शामिल कर देगा (कोई बात नहीं कि aapt जावा कोड के माध्यम से संसाधनों तक पहुंच को सक्षम करता है, यह एक अलग मुद्दा है)।
अपस्टैट वह Context
है जो सिस्टम संसाधनों तक पहुंच और इसके घटकों को "अधिक एप्लिकेशन" में हुक करता है। आइए उपवर्गों पर नजर डालते हैं Context
, वे कक्षाएं जो अमूर्त Context
वर्ग का कार्यान्वयन प्रदान करती हैं । सबसे स्पष्ट वर्ग वह वर्ग है जो विरासत में मिला है Activity
। Activity
से ContextThemeWrapper
है, जो से विरासत में मिली ContextWrapper
, से जो विरासत में मिली Context
ही। उन वर्गों एक गहरे स्तर पर चीजों को समझने के लिए को देखने के लिए उपयोगी होते हैं, लेकिन अब ऐसा लगता है कि पता करने के लिए पर्याप्त है ContextThemeWrapper
और ContextWrapper
काफी वे क्या तरह ध्वनि कर रहे हैं। वे का सार तत्व को लागू Context
एक संदर्भ (वास्तविक संदर्भ) को "रैपिंग" करके खुद को और उन कार्यों को उस संदर्भ में सौंपना। एक उदाहरण सहायक है -ContextWrapper
कक्षा, कक्षा से सार विधि getAssets
इस Context
प्रकार लागू की जाती है:
@Override
public AssetManager getAssets() {
return mBase.getAssets();
}
mBase
बस एक विशिष्ट संदर्भ के लिए निर्माता द्वारा निर्धारित एक क्षेत्र है। तो एक संदर्भ लपेटा जाता है और ContextWrapper
उस संदर्भ में getAssets विधि के इसके कार्यान्वयन को दर्शाता है। आइए उस Activity
वर्ग की जांच करने के लिए वापस जाएं जो अंत में विरासत में मिला है Context
यह देखने के लिए कि यह सब कैसे काम करता है।
आप शायद जानते हैं कि एक गतिविधि क्या है, लेकिन समीक्षा करने के लिए - यह मूल रूप से एक एकल चीज़ है जो उपयोगकर्ता कर सकता है। यह एक विंडो प्रदान करने का ध्यान रखता है जिसमें यूआई को रखने के लिए उपयोगकर्ता के साथ बातचीत करता है '। अन्य एपीआई और गैर-डेवलपर्स से परिचित डेवलपर्स शायद इसे "स्क्रीन" के रूप में अलौकिक रूप से सोच सकते हैं। यह तकनीकी रूप से गलत है, लेकिन यह हमारे उद्देश्यों के लिए मायने नहीं रखता है। तो कैसे Activity
और Context
बातचीत करते हैं और वास्तव में उनके वंशानुक्रम में क्या हो रहा है?
फिर से, यह विशिष्ट उदाहरणों को देखने के लिए सहायक है। हम सभी जानते हैं कि गतिविधियों को कैसे शुरू किया जाए। बशर्ते आपके पास "संदर्भ" है जिसमें से आप गतिविधि शुरू कर रहे हैं, आप बस फोन करते हैं startActivity(intent)
, जहां आशय उस संदर्भ का वर्णन करता है जहां से आप एक गतिविधि शुरू कर रहे हैं और गतिविधि जिसे आप शुरू करना चाहते हैं। यह परिचित है startActivity(this, SomeOtherActivity.class)
।
और क्या है this
? this
अपनी गतिविधि है क्योंकि Activity
वर्ग से विरासत में मिला है Context
। पूर्ण स्कूप इस तरह है: जब आप कॉल करते हैं startActivity
, तो अंततः Activity
क्लास कुछ इस तरह निष्पादित करता है:
Instrumentation.ActivityResult ar =
mInstrumentation.execStartActivity(
this, mMainThread.getApplicationThread(), mToken, this,
intent, requestCode);
तो यह इस्तेमाल execStartActivity
से Instrumentation
वर्ग (वास्तव में एक आंतरिक वर्ग से Instrumentation
कहा जाता है ActivityResult
)।
इस बिंदु पर, हम सिस्टम इंटर्नल्स पर एक झलक पाने लगे हैं।
यह वह जगह है जहां ओएस वास्तव में सब कुछ संभालता है। तो इंस्ट्रूमेंटेशन वास्तव में गतिविधि कैसे शुरू करता है? ठीक है, ऊपर this
की execStartActivity
विधि में परम आपकी गतिविधि, अर्थात संदर्भ, और execStartActivity
इस संदर्भ का उपयोग करता है।
30,000 ओवरव्यू यह है: इंस्ट्रूमेंटेशन क्लास उन गतिविधियों की एक सूची पर नज़र रखता है जो इसे काम करने के लिए निगरानी कर रही हैं। इस सूची का उपयोग सभी गतिविधियों के समन्वय के लिए किया जाता है और सुनिश्चित करें कि गतिविधियों के प्रवाह को प्रबंधित करने में सब कुछ सुचारू रूप से चलता है।
कुछ ऐसे ऑपरेशन हैं, जिन पर मैंने पूरी तरह से ध्यान नहीं दिया है, जो थ्रेड और प्रक्रिया के मुद्दों को समन्वयित करते हैं। अंततः, ActivityResult
एक देशी ऑपरेशन का उपयोग करता है - ActivityManagerNative.getDefault().startActivity()
जो Context
आपके द्वारा पास किए जाने पर आपके द्वारा उपयोग किए गए का उपयोग करता है startActivity
। यदि आप जिस संदर्भ में पास हुए हैं उसका उपयोग "इरादे के संकल्प" में यदि आवश्यक हो तो सहायता के लिए किया जाता है। इंटेंट रेजोल्यूशन वह प्रक्रिया है जिसके द्वारा सिस्टम सप्लाई न होने पर इरादे के लक्ष्य को निर्धारित कर सकता है। (अधिक जानकारी के लिए यहां गाइड देखें)।
और ऐसा करने के लिए एंड्रॉइड के लिए, उसे उस जानकारी तक पहुंच की आवश्यकता होती है जो उसके द्वारा आपूर्ति की जाती है Context
। विशेष रूप से, सिस्टम को इस तक पहुंचने की आवश्यकता है ContentResolver
कि वह "इरादे के डेटा के MIME प्रकार को निर्धारित कर सकता है"। यह पूरी तरह startActivity
से संदर्भ का उपयोग कैसे करता है थोड़ा जटिल था और मैं खुद को आंतरिक रूप से पूरी तरह से नहीं समझता हूं। मेरा मुख्य बिंदु केवल यह वर्णन करना था कि किसी एप्लिकेशन के लिए आवश्यक कई ऑपरेशन करने के लिए एप्लिकेशन-वाइड संसाधनों तक कैसे पहुँचा जा सकता है। Context
यह इन संसाधनों तक पहुँच प्रदान करता है। एक सरल उदाहरण दृश्य हो सकता है। हम सभी जानते हैं कि आप क्या बनाते हैं। कस्टम विस्तार RelativeLayout
या किसी अन्य View
वर्ग के द्वारा, आपको एक कंस्ट्रक्टर प्रदान करना होगा जो एक लेता हैContext
एक तर्क के रूप में। जब आप अपने कस्टम को तुरंत देखते हैं तो आप संदर्भ में पास होते हैं। क्यों? क्योंकि दृश्य को थीम, संसाधनों और अन्य व्यू कॉन्फ़िगरेशन विवरण तक पहुंच प्राप्त करने में सक्षम होना चाहिए। कॉन्फ़िगरेशन देखना वास्तव में एक महान उदाहरण है। प्रत्येक संदर्भ में विभिन्न पैरामीटर ( Context
'कार्यान्वयन में क्षेत्र ) होते हैं जो ओएस द्वारा खुद को प्रदर्शन के आयाम या घनत्व जैसी चीजों के लिए निर्धारित किया जाता है। यह देखना आसान है कि दृश्य, आदि की स्थापना के लिए यह जानकारी क्यों महत्वपूर्ण है।
एक अंतिम शब्द: किसी कारण से लोग एंड्रॉइड के लिए नए (और यहां तक कि लोग इतने नए नहीं हैं) एंड्रॉइड की बात आते ही ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के बारे में पूरी तरह से भूल जाते हैं। किसी कारण से, लोग अपने एंड्रॉइड डेवलपमेंट को पूर्व-निर्धारित प्रतिमानों या सीखे हुए व्यवहारों में मोड़ने की कोशिश करते हैं।
एंड्रॉइड का अपना प्रतिमान है और एक निश्चित पैटर्न है जो वास्तव में काफी सुसंगत है यदि आपकी पूर्व-निर्धारित धारणाओं को छोड़ दें और बस प्रलेखन और देव गाइड पढ़ें। मेरा वास्तविक बिंदु, हालांकि, "सही संदर्भ प्राप्त करना" कभी-कभी मुश्किल हो सकता है, लोग अनुचित रूप से घबराते हैं क्योंकि वे ऐसी स्थिति में भागते हैं जहां उन्हें संदर्भ की आवश्यकता होती है और लगता है कि उनके पास ऐसा नहीं है। एक बार फिर, जावा एक ऑब्जेक्ट-ओरिएंटेड डिज़ाइन के साथ ऑब्जेक्ट-ओरिएंटेड भाषा है।
आपकी गतिविधि के अंदर केवल आपके पास "संदर्भ" है क्योंकि आपकी गतिविधि स्वयं प्रसंग से विरासत में मिली है। इसमें कोई जादू नहीं है (सभी सामानों को छोड़कर जो ओएस विभिन्न मापदंडों को निर्धारित करने और अपने संदर्भ को सही ढंग से "कॉन्फ़िगर" करने के लिए करता है)। इसलिए, स्मृति / प्रदर्शन के मुद्दों को एक तरफ रखना (जैसे कि संदर्भ के संदर्भ को तब पकड़ना जब आपको इसकी आवश्यकता नहीं है या इसे इस तरह से करना है कि स्मृति, आदि पर नकारात्मक परिणाम हों), संदर्भ किसी भी अन्य की तरह एक वस्तु है और इसे पास किया जा सकता है किसी भी POJO (सादे पुराने जावा ऑब्जेक्ट) की तरह। कभी-कभी आपको उस संदर्भ को पुनः प्राप्त करने के लिए चतुर चीजें करने की आवश्यकता हो सकती है, लेकिन कोई भी नियमित जावा वर्ग जो ऑब्जेक्ट के अलावा और कुछ भी नहीं से फैली हुई है, उस तरह से लिखा जा सकता है, जिसमें संदर्भ तक पहुंच हो; बस एक सार्वजनिक विधि को उजागर करता है जो एक संदर्भ लेता है और फिर आवश्यकतानुसार उस कक्षा में इसका उपयोग करता है।
एक संदर्भ प्रणाली के लिए एक संभाल है; यह संसाधनों को हल करने, डेटाबेस और वरीयताओं तक पहुंच प्राप्त करने, और इसी तरह की सेवाएं प्रदान करता है। एक एंड्रॉइड ऐप में गतिविधियां हैं। संदर्भ आपके अनुप्रयोग के वर्तमान में चल रहे परिवेश के लिए एक हैंडल की तरह है। गतिविधि ऑब्जेक्ट को संदर्भ ऑब्जेक्ट विरासत में मिला है।
अधिक जानकारी के लिए, एंड्रॉइड स्टूडियो - ट्यूटोरियल के साथ एंड्रॉइड डेवलपमेंट का परिचय देखें ।
Context
एक अनुप्रयोग वातावरण के बारे में वैश्विक जानकारी के लिए एक "इंटरफ़ेस" है। व्यवहार में, Context
वास्तव में एक अमूर्त वर्ग है , जिसका कार्यान्वयन एंड्रॉइड सिस्टम द्वारा प्रदान किया गया है।
यह एप्लिकेशन-विशिष्ट संसाधनों और कक्षाओं तक पहुंच के साथ-साथ एप्लिकेशन-स्तरीय संचालन के लिए कॉल-अप करने की अनुमति देता है, जैसे कि लॉन्चिंग गतिविधियां, प्रसारण और प्राप्त करना, आदि।
निम्नलिखित तस्वीर में, आप कक्षाओं का एक पदानुक्रम देख सकते हैं, जहां Context
इस पदानुक्रम का मूल वर्ग है। विशेष रूप से, यह इस बात पर जोर देने के लायक है कि Activity
किसका वंशज है Context
।
Context
वास्तव में क्या है?
Android संदर्भ प्रलेखन के अनुसार, यह एक इकाई है जो विभिन्न पर्यावरण डेटा का प्रतिनिधित्व करती है। यह स्थानीय फ़ाइलों, डेटाबेस, पर्यावरण से जुड़े वर्ग लोडर, सेवाओं (सिस्टम-स्तरीय सेवाओं सहित), और अधिक तक पहुंच प्रदान करता है। इस पुस्तक के दौरान, और Android के साथ आपके दिन-प्रतिदिन के कोडिंग में, आप देखेंगे कि प्रसंग अक्सर पास होता है।
" एंड्रॉइड इन प्रैक्टिस " पुस्तक से, पी। 60।
कई एंड्रॉइड एपीआई को एक Context
पैरामीटर के रूप में आवश्यकता होती है
यदि आप विभिन्न Android एपीआई के माध्यम से देखते हैं, तो आप देखेंगे कि उनमें से कई android.content.Context
एक पैरामीटर के रूप में एक वस्तु लेते हैं । आप यह भी देखेंगे कि एक गतिविधि या एक सेवा आमतौर पर एक के रूप में उपयोग की जाती है
Context
। यह काम करता है क्योंकि इन दोनों वर्गों का विस्तार होता है Context
।
context
एंड्रॉइड में समझने के लिए सरल उदाहरण :
प्रत्येक बॉस के पास सभी महत्वपूर्ण और समय लेने वाले कार्यों की देखभाल करने के लिए एक सहायक है। यदि एक फ़ाइल या एक कप कॉफी की जरूरत है, तो एक सहायक रन पर है। कुछ बॉस मुश्किल से जानते हैं कि कार्यालय में क्या चल रहा है, इसलिए वे अपने सहायकों से इस बारे में पूछते हैं। वे कुछ काम स्वयं करते हैं लेकिन ज्यादातर अन्य चीजों के लिए उन्हें अपने सहायकों की मदद की आवश्यकता होती है।
इस परिदृश्य में,
बॉस - एंड्रॉइड एप्लिकेशन है
सहायक - प्रसंग है
कॉफी की फाइलें / कप - संसाधन हैं
जब हम अपने एप्लिकेशन के विभिन्न भागों जैसे गतिविधियों, अनुप्रयोगों आदि के बारे में जानकारी प्राप्त करना चाहते हैं, तो हम आम तौर पर संदर्भ कहते हैं।
कुछ ऑपरेशन (वे चीजें जहां सहायक की जरूरत होती है) जहां संदर्भ शामिल है:
संदर्भ प्राप्त करने के विभिन्न तरीके:
getContext()
getBaseContext()
getApplicationContext()
this
एक Android संदर्भ एक इंटरफ़ेस है (सामान्य अर्थों में, जावा अर्थों में नहीं, जावा में, Context
वास्तव में एक अमूर्त वर्ग है!) जो विशिष्ट संसाधनों और वर्ग तक पहुँचने और अनुप्रयोग वातावरण के बारे में जानकारी देने की अनुमति देता है।
यदि आपका एंड्रॉइड ऐप एक वेब ऐप था, तो आपका संदर्भ कुछ इसी तरह होगा ServletContext
(मैं यहां सटीक तुलना नहीं कर रहा हूं)।
आपकी गतिविधियाँ और सेवाएँ भी विस्तारित होती हैं Context
, इसलिए वे उन सभी तरीकों को विरासत में लेते हैं , जिनमें पर्यावरण की जानकारी पहुँचती है, जिसमें ऐप चल रहा है।
Context
पर्यावरण डेटा प्राप्त करने के लिए एक हैंडल का प्रतिनिधित्व करता है।Context
कक्षा को ही सार के रूप में घोषित किया गया है, जिसका कार्यान्वयन एंड्रॉइड ओएस द्वारा प्रदान किया गया है।Context
एक टीवी के रिमोट की तरह है और टेलीविजन में चैनल संसाधनों, सेवाओं आदि हैं।
तुम्हारे द्वारा इससे क्या किया जा सकता है ?
संदर्भ पाने के तरीके:
बस इसे बाहर वहाँ newbies के लिए डाल;
तो सबसे पहले Word Context को समझें:
अंग्रेजी-लिब में। इसका मतलब:
"ऐसी परिस्थितियाँ जो किसी घटना, कथन या विचार के लिए सेटिंग का निर्माण करती हैं, और जिसके संदर्भ में इसे पूरी तरह से समझा और मूल्यांकन किया जा सकता है।"
"लिखित या बोली जाने वाली किसी चीज़ के अंश जो तुरंत पहले से हो जाते हैं और किसी शब्द या अंश का अनुसरण करते हैं और उसका अर्थ स्पष्ट करते हैं।"
अब प्रोग्रामिंग दुनिया के लिए समान समझ लें:
आवेदन / वस्तु की वर्तमान स्थिति का संदर्भ। यह नव निर्मित वस्तुओं को समझने देता है कि क्या चल रहा है। आमतौर पर आप इसे अपने कार्यक्रम के दूसरे भाग (गतिविधि, पैकेज / आवेदन) के बारे में जानकारी प्राप्त करने के लिए कहते हैं
आप संदर्भ प्राप्त कर सकते हैं getApplicationContext()
, getContext(), getBaseContext()
या this
(गतिविधि वर्ग में)।
निम्नलिखित कोड के उपयोग में कहीं भी संदर्भ प्राप्त करने के लिए:
AppContext
अपने Android एप्लिकेशन के अंदर नई कक्षा बनाएं
public class AppContext extends Application {
private static Context context;
public void onCreate(){
super.onCreate();
AppContext.context = getApplicationContext();
}
public static Context getAppContext() {
return AppContext.context;
}
}
अब जब भी आप गैर-गतिविधि वर्ग में एप्लिकेशन संदर्भ चाहते हैं, तो इस पद्धति को कॉल करें और आपके पास एप्लिकेशन संदर्भ है।
उममीद है कि इससे मदद मिलेगी ;)
वर्ग android.content.Context
एंड्रॉइड सिस्टम और प्रोजेक्ट के संसाधनों के लिए कनेक्शन प्रदान करता है। यह अनुप्रयोग वातावरण के बारे में वैश्विक जानकारी के लिए इंटरफ़ेस है।
संदर्भ Android सेवा, जैसे स्थान सेवा, तक पहुँच प्रदान करता है।
गतिविधियाँ और सेवाएँ Context
कक्षा का विस्तार करती हैं ।
प्रसंग वर्ग का उदाहरण है Android.content.Context Android प्रणाली को कनेक्शन प्रदान करता है जो अनुप्रयोग को निष्पादित करता है। उदाहरण के लिए, आप प्रसंग के माध्यम से वर्तमान डिवाइस डिस्प्ले के आकार की जांच कर सकते हैं।
यह परियोजना के संसाधनों तक पहुंच भी देता है। यह अनुप्रयोग वातावरण के बारे में वैश्विक जानकारी के लिए इंटरफ़ेस है।
प्रसंग वर्ग भी एंड्रॉइड सेवाओं तक पहुंच प्रदान करता है, उदाहरण के लिए, समय आधारित घटनाओं को ट्रिगर करने के लिए अलार्म प्रबंधक।
गतिविधियाँ और सेवाएँ प्रसंग वर्ग का विस्तार करती हैं। इसलिए उनका उपयोग सीधे संदर्भ तक पहुंचने के लिए किया जा सकता है।
संदर्भ एक अनुप्रयोग वातावरण के बारे में वैश्विक जानकारी के लिए एक इंटरफ़ेस है। यह एक अमूर्त वर्ग है जिसका कार्यान्वयन Android
प्रणाली द्वारा प्रदान किया गया है।
Context
एप्लिकेशन-विशिष्ट संसाधनों और कक्षाओं तक पहुंच के साथ-साथ एप्लिकेशन-स्तरीय संचालन जैसे कॉल की अनुमति देता है launching activities, broadcasting and receiving intents, etc.
यहाँ उदाहरण है
public class MyActivity extends Activity {
public void Testing() {
Context actContext = this; /*returns the Activity Context since Activity extends Context.*/
Context appContext = getApplicationContext(); /*returns the context of the single, global Application object of the current process. */
Button BtnShowAct1 = (Button) findViewById(R.id.btnGoToAct1);
Context BtnContext = BtnShowAct1.getContext(); /*returns the context of the View. */
अधिक जानकारी के लिए आप http://developer.android.com/reference/android/content/Context.html पर जा सकते हैं
संदर्भ मूल रूप से संसाधन के उपयोग और एप्लिकेशन के पर्यावरण विवरण (एप्लिकेशन संदर्भ के लिए) या गतिविधि (गतिविधि के संदर्भ के लिए) या किसी अन्य जानकारी के लिए है ...
मेमोरी लीक से बचने के लिए आपको हर घटक के लिए एप्लिकेशन संदर्भ का उपयोग करना चाहिए जिसके लिए संदर्भ ऑब्जेक्ट की आवश्यकता है .... यहां क्लिक करें
संदर्भ अनुप्रयोग / वस्तु की वर्तमान स्थिति का संदर्भ है। एक इकाई जो विभिन्न पर्यावरण डेटा का प्रतिनिधित्व करती है। संदर्भ वर्तमान गतिविधि को स्थानीय फ़ाइलों, डेटाबेस, पर्यावरण से जुड़े क्लास लोडर, सिस्टम-स्तरीय सेवाओं सहित सेवाओं जैसे आउट-साइड एंड्रॉइड वातावरण के साथ बातचीत करने में मदद करता है।
एक संदर्भ प्रणाली के लिए एक संभाल है। यह संसाधनों को हल करने, डेटाबेस और वरीयताओं तक पहुंच प्राप्त करने, और इसी तरह की सेवाएं प्रदान करता है। Android ऐप में गतिविधियाँ होती हैं। यह उस पर्यावरण के लिए एक संभाल की तरह है जो आपके एप्लिकेशन वर्तमान में चल रहा है। गतिविधि ऑब्जेक्ट को संदर्भ ऑब्जेक्ट विरासत में मिला है।
अलग-अलग आह्वान के तरीके जिनसे आप संदर्भ प्राप्त कर सकते हैं 1. getApplicationContext (), 2. getContext (), 3. getBaseContext () 4. या यह (जब एक्टिविटी क्लास में हो)।
संदर्भ का अर्थ है कि एंड्रॉइड को यह पता होना चाहिए कि मुझे किस गतिविधि में जाना चाहिए या उसके लिए कार्य करना चाहिए।
1 - Toast.makeText(context, "Enter All Details", Toast.LENGTH_SHORT).show();
यह इस में इस्तेमाल किया।
Context context = ActivityName.this;
2 -startActivity(new Intent(context,LoginActivity.class));
इस संदर्भ में आप किस गतिविधि से दूसरी गतिविधि में जाना चाहते हैं। संदर्भ या ActivityName.this तब तेज़ है, getContext और getApplicatinContext।
ए Context
क्या है हम में से ज्यादातर आवेदन कहते हैं । यह एंड्रॉइड सिस्टम द्वारा बनाया गया है और केवल वही कर सकता है जो कोई एप्लिकेशन कर सकता है। टॉमकैट में, एक प्रसंग यह भी है कि मैं किसी एप्लिकेशन को क्या कहूंगा।
एक प्रसंग है जिसमें कई गतिविधियाँ हैं, प्रत्येक गतिविधि में कई दृश्य हो सकते हैं।
जाहिर है, कुछ कहेंगे कि यह इस या उस वजह से फिट नहीं होता है और वे शायद सही हैं, लेकिन यह कहना कि एक प्रसंग है आपका वर्तमान एप्लिकेशन आपको यह समझने में मदद करेगा कि आप विधि के मापदंडों में क्या डाल रहे हैं।
कॉनटेक्स्ट की तकनीकी में गहरी गोता लगाने से पहले एक छोटी सा उपमा देता है
प्रत्येक बॉस में एक सहायक या कोई (गलत लड़का) होता है जो उसके लिए कम महत्वपूर्ण और अधिक समय लेने वाली चीजें करता है। उदाहरण के लिए, यदि उन्हें एक फ़ाइल या कॉफी की आवश्यकता होती है, तो एक सहायक रन पर होगा। बॉस को नहीं पता होगा कि बैकग्राउंड में क्या चल रहा है लेकिन फाइल या टास्क डिलीवर हो जाएगा
तो यहाँ
बॉस - Android अनुप्रयोग
सहायक - संदर्भ
फ़ाइल या कॉफी का कप - संसाधन
संदर्भ आवेदन से संबंधित संसाधनों के लिए आपका पहुंच बिंदु है
आइए देखते हैं ऐसे ही कुछ संसाधन या कार्य
एक गतिविधि शुरू करना।
फ़ाइल सिस्टम पर एप्लिकेशन विशिष्ट कैश निर्देशिका के लिए पूर्ण पथ प्राप्त करना।
यह निर्धारित करना कि सिस्टम में चलने वाली किसी विशेष प्रक्रिया और उपयोगकर्ता आईडी के लिए दी गई अनुमति है या नहीं।
यह जाँचना कि आपको कोई विशेष अनुमति दी गई है या नहीं।
और इसी तरह।
इसलिए यदि कोई Android एप्लिकेशन कोई गतिविधि शुरू करना चाहता है, तो यह सीधे Context
(एक्सेस प्वाइंट) पर जाता है, औरContext
क्लास उसे संसाधन वापस भेज देता है (इस मामले में आशय)।
किसी भी अन्य वर्ग की तरह Context
ही खेतों और विधियों में भी है।
आप Context
आधिकारिक दस्तावेज़ीकरण के बारे में अधिक जानकारी प्राप्त कर सकते हैं , इसमें बहुत अधिक सब कुछ, उपलब्ध तरीके, फ़ील्ड और यहां तक कि कैसे तरीकों के साथ फ़ील्ड का उपयोग करना शामिल है।
वर्ग android.content.Context के उदाहरण Android सिस्टम से कनेक्शन प्रदान करते हैं जो एप्लिकेशन को निष्पादित करता है। उदाहरण के लिए, आप प्रसंग के माध्यम से वर्तमान डिवाइस डिस्प्ले के आकार की जांच कर सकते हैं।
यह परियोजना के संसाधनों तक पहुंच भी देता है। यह अनुप्रयोग वातावरण के बारे में वैश्विक जानकारी के लिए इंटरफ़ेस है।
प्रसंग वर्ग भी एंड्रॉइड सेवाओं तक पहुंच प्रदान करता है, उदाहरण के लिए, समय आधारित घटनाओं को ट्रिगर करने के लिए अलार्म प्रबंधक।
गतिविधियाँ और सेवाएँ प्रसंग वर्ग का विस्तार करती हैं। इसलिए उनका उपयोग सीधे संदर्भ तक पहुंचने के लिए किया जा सकता है।
यदि आप Android में अन्य परिचित वर्गों के साथ संदर्भ कनेक्ट करना चाहते हैं , तो इस संरचना को ध्यान में रखें:
प्रसंग <प्रसंगवक्ता <अनुप्रयोग
संदर्भ <ContextWrapper <ContextThemeWrapper <गतिविधि
प्रसंग <संदर्भ
प्रसंग <प्रसंगवक्ता <सेवा
प्रसंग <प्रसंगवक्ता <सेवा <आशय सेवा
तो, वे सभी वर्ग अपने-अपने तरीके से संदर्भ हैं। यदि आप चाहें तो आप सेवा और सूचीकरण को संदर्भ के लिए डाल सकते हैं । लेकिन अगर आप बारीकी से देखें, तो कुछ कक्षाएं विषय के रूप में भी विरासत में मिली हैं। गतिविधि या टुकड़े में, आप अपने विचारों पर लागू होना पसंद करेंगे, लेकिन उदाहरण के लिए, इसे सेवा वर्ग की परवाह न करें ।
मैं यहाँ संदर्भों में अंतर समझाता हूँ ।
सरल, Androids डाल रहा है Context
एक गड़बड़ है जिसे आप तब तक प्यार नहीं करेंगे जब तक आप इसके बारे में चिंता करना बंद नहीं करते।
Android Context
s हैं:
ईश्वर-वस्तुओं।
यह सोचते हुए कि आप अपने सभी एप्लिकेशन को तब पास करना चाहते हैं जब आप एंड्रॉइड के लिए विकसित करना शुरू कर रहे हैं, लेकिन जब आप प्रोग्रामिंग, परीक्षण और एंड्रॉइड से थोड़ा सा करीब हो जाएंगे, तो इसे करने से बचें।
अस्पष्ट निर्भरता।
स्मृति लीक का सामान्य स्रोत।
परीक्षण के लिए पी.टी.ए.
एंड्रॉइड सिस्टम द्वारा अनुमतियों, संसाधनों, वरीयताओं, सेवाओं, प्रसारण, शैली, संवाद दिखाने और लेआउट को प्रदर्शित करने के लिए वास्तविक संदर्भ का उपयोग किया जाता है। और आपको Context
कुछ अलग चीजों के लिए अलग- अलग उदाहरणों की आवश्यकता होती है (जाहिर है, आप किसी एप्लिकेशन या सेवा के संदर्भ से संवाद नहीं दिखा सकते हैं; एप्लिकेशन और गतिविधि संदर्भों से फुलाए गए लेआउट भिन्न हो सकते हैं)।
संदर्भ प्रत्येक ऐप-एस सैंडबॉक्स के लिए एंड्रॉइड विशिष्ट एपी है जो संसाधनों, डेटाबेस, निजी फाइलरों, प्राथमिकताओं, सेटिंग्स जैसे एक्सेस ऐप निजी डेटा प्रदान करता है ...
अधिकांश निजीकृत एक आवेदन की सभी गतिविधियों / सेवाओं / प्रसारण सूची के लिए समान हैं।
चूंकि एप्लिकेशन, गतिविधि, सेवा प्रसंग इंटरफ़ेस को लागू करते हैं, उनका उपयोग किया जा सकता है जहां एक एपीआई कॉल को एक संदर्भ पैरामीटर की आवश्यकता होती है
Context
विभिन्न समयावधि में घटक (या अनुप्रयोग) का अर्थ है। अगर मैं 1 से 2 बजे के बीच इतना खाना खा लेता हूं तो उस समय के मेरे संदर्भ का उपयोग उन सभी तरीकों (या संसाधनों) तक पहुंचने के लिए किया जाता है जो मैं उस समय के दौरान उपयोग करता हूं। सामग्री विशेष समय के लिए एक घटक (अनुप्रयोग) है। Context
घटकों या अनुप्रयोग के अंतर्निहित जीवनचक्र के आधार पर अनुप्रयोग के घटक बदलते रहते हैं। उदाहरण के लिए, एक की OnCreate () के अंदर Activity
,
getBaseContext()
- गतिविधि के निर्माता द्वारा सेट (बनाया) context
का वह देता है Activity
।
getApplicationContext()
- देता हैContext
एप्लिकेशन के निर्माण के दौरान सेटअप (बनाया) ।
नोट: <application>
सभी Android घटक रखती है।
<application>
<activity> .. </activity>
<service> .. </service>
<receiver> .. </receiver>
<provider> .. </provider>
</application>
इसका मतलब है, जब आप getApplicationContext()
किसी भी घटक के अंदर से कॉल करते हैं, तो आप पूरे एप्लिकेशन के सामान्य संदर्भ को कॉल कर रहे हैं।
Context
घटकों के जीवनचक्र पर आधारित प्रणाली द्वारा संशोधित किया जा रहा है।
विभिन्न संसाधनों के साथ एक बॉक्स के रूप में संदर्भ के बारे में सोचो: स्ट्रिंग, रंग और फोंट। यदि आपको एक संसाधन की आवश्यकता है, तो आप इस बॉक्स को चालू करते हैं। जब आप स्क्रीन को घुमाते हैं, तो यह बॉक्स बदलता है क्योंकि ओरिएंटेशन परिदृश्य में बदलता है।
Context
वर्तमान का मतलब है।
Context
वर्तमान स्क्रीन के लिए ऑपरेशन करने के लिए उपयोग करें। पूर्व।
1. getApplicationContext ()
2. getContext ()
Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show();
महान स्पष्टीकरण! उपरोक्त सभी को पूरक करने के लिए, मैंने इसे माइंडऑक्स से बहुत उपयोगी पाया, यहां तक कि आपके दिमाग को जाने के लिए कुछ बुनियादी उपयोग के मामलों को भी दिखाया गया है:
जावा में, हम कहते हैं कि यह कीवर्ड एप्लिकेशन के वर्तमान ऑब्जेक्ट की स्थिति को संदर्भित करता है।
इसी तरह, एक वैकल्पिक में हमारे पास हैContext
Android विकास है।
इसे या तो स्पष्ट या स्पष्ट रूप से परिभाषित किया जा सकता है,
Context con = this;
getApplicationContext();
getBaseContext();
getContext();
this
केवल गतिविधियों में काम करता है। संदर्भ "यह" का संदर्भ नहीं है - संदर्भ का उपयोग सिस्टम सुविधाओं तक पहुंचने के लिए किया जाता है, और बहुत कुछ। आप संदर्भ को सरल बना रहे हैं और इसके साथ मुख्य बिंदु को याद नहीं कर रहे हैं।