बहुत ही रोचक सवाल। मुझे लगता है कि यह मुख्य रूप से अर्थ अर्थ है, और ऐतिहासिक कारणों से भी हो सकता है।
यद्यपि वर्तमान एंड्रॉइड गतिविधि और सेवा कार्यान्वयन में, getApplication()
और getApplicationContext()
समान ऑब्जेक्ट वापस करते हैं, इस बात की कोई गारंटी नहीं है कि यह हमेशा मामला होगा (उदाहरण के लिए, एक विशिष्ट विक्रेता कार्यान्वयन में)।
इसलिए यदि आप चाहते हैं कि आप जिस एप्लिकेशन वर्ग को मेनिफेस्ट में पंजीकृत करें , तो आपको कभी भी उसे कॉल नहीं करना चाहिए getApplicationContext()
और उसे अपने आवेदन में नहीं डालना चाहिए , क्योंकि यह एप्लिकेशन इंस्टेंस नहीं हो सकता है (जिसे आपने स्पष्ट रूप से परीक्षण ढांचे के साथ अनुभव किया है)।
getApplicationContext()
पहले स्थान पर क्यों है ?
getApplication()
केवल गतिविधि वर्ग और सेवा वर्ग में उपलब्ध है, जबकि getApplicationContext()
संदर्भ वर्ग में घोषित किया गया है।
इसका वास्तव में एक मतलब है: जब एक प्रसारण रिसीवर में कोड लिखना, जो कि एक संदर्भ नहीं है, लेकिन इसकी ऑनरिव विधि में एक संदर्भ दिया गया है, तो आप केवल कॉल कर सकते हैं getApplicationContext()
। जिसका अर्थ यह भी है कि किसी ब्रॉडकास्टसीवर में आपको अपने एप्लिकेशन तक पहुंचने की गारंटी नहीं है।
एंड्रॉइड कोड को देखते समय, आप देखते हैं कि संलग्न होने पर, एक गतिविधि को एक आधार संदर्भ और एक आवेदन प्राप्त होता है, और वे अलग-अलग पैरामीटर हैं। getApplicationContext()
प्रतिनिधियों यह करने के लिए कहते हैं baseContext.getApplicationContext()
।
एक और बात: प्रलेखन का कहना है कि यह ज्यादातर मामलों में, आपको एप्लिकेशन को उप-वर्ग करने की आवश्यकता नहीं होनी चाहिए:
आमतौर पर उपवर्ग की कोई आवश्यकता नहीं है Application
। अधिकांश स्थिति में, स्थिर एकल एकल अधिक कार्यात्मक तरीके से समान कार्यक्षमता प्रदान कर सकते हैं। यदि आपके सिंगलटन को एक वैश्विक संदर्भ की आवश्यकता है (उदाहरण के लिए प्रसारण रिसीवर को पंजीकृत करने के लिए), तो इसे पुनः प्राप्त करने के लिए फ़ंक्शन को सिंगलटन का निर्माण करते समय Context
आंतरिक रूप से उपयोग किया जा सकता है
Context.getApplicationContext()
।
मुझे पता है कि यह एक सटीक और सटीक उत्तर नहीं है, लेकिन फिर भी, क्या यह आपके सवाल का जवाब देता है?
Application
।