2012-01-13 13 views
7

मुझे पता है कि अगर मुझे कुछ स्थैतिक फ़ंक्शन में एक संसाधन प्राप्त करने की आवश्यकता है, तो मुझे संदर्भ के संदर्भ या संदर्भों को किसी भी तरह से पास करना होगा - पैरामीटर द्वारा या स्थैतिक चर के माध्यम से। लेकिन क्यों यह निरंतर है? संसाधनों की आईडी स्थिर परिवेश में पहुंच योग्य है, उदाहरण के लिए R.string.some_my_stuff। अगर मैं सिस्टम संसाधन चाहता हूं, तो यह Resources.getSystem().getString(android.string.some_common_stuff) के माध्यम से भी दिखाई देता है। लेकिन मैं एप्लिकेशन संसाधन प्राप्त करने के समान कुछ क्यों नहीं कर सकता? संसाधन फाइल स्रोतों का सामान्य स्थैतिक हिस्सा हैं। संसाधन स्थिर और से संबंधित हैं। आवेदन की कक्षाएं इसी तरह से संबंधित हैं और मैं अपने स्थिर भागों को एक स्थिर तरीके से एक्सेस कर सकता हूं।संसाधनों को स्थिर तरीके से एक्सेस करना असंभव क्यों है?

मैं सभी अनुप्रयोगों में संसाधनों का उपयोग उसी स्थिर तरीके से क्यों नहीं कर सकता, जो सबसे स्वाभाविक होगा, लेकिन इसके बजाय उन्हें उदाहरण के माध्यम से एक्सेस करना होगा?

मुझे डर है, मुझे कुछ बहुत महत्वपूर्ण समझ में नहीं आता है।

कृपया दोहराएं कि मैं इसे नहीं कर सकता। मैं इसे अपने सम्मान पर जानता हूं। कृपया, समझाओ, या मुझे रास्ता दिखाएं ... केवल वह मुझे मेरी उदासी से ठीक करेगा :-) धन्यवाद।

+1

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

+1

ध्यान दें कि आप उन संसाधनों को नहीं प्राप्त कर सकते हैं जो चिंता गतिविधियों/विचारों से लोड नहीं होते हैं। – adatapost

+0

@njzk। 1. कि मैं आवश्यकता तक पहुंच सकता हूं इसका मतलब यह नहीं है कि मुझे इसके लिए पहुंचना होगा। 2. गतिविधि में स्थिर अंतिम var परिभाषाओं में आप संदर्भ के लिए नहीं पहुंच सकते हैं, लेकिन पुनर्नवीनीकरण से वैश्विक स्थिरांक पढ़ना यहां स्वाभाविक होगा। – Gangnus

उत्तर

3

संसाधन आईडी प्रति एप्लिकेशन अद्वितीय हैं, वे सभी एप्लिकेशन (एंड्रॉइड सिस्टम सहित) पर अद्वितीय नहीं हैं। जैसे अलग-अलग अनुप्रयोगों में दो अलग-अलग स्ट्रिंग हो सकती हैं, जिनमें एक ही आईडी है, 42. इसलिए योन स्थिर रूप से केवल एक ही एप्लिकेशन तक पहुंच सकता है (प्रत्येक प्रोग्रामर को यह मानना ​​चाहिए कि यह कौन सा है, इसकी एंड्रॉइड सिस्टम (कोई विकल्प नहीं है, यह केवल एक ही है हमेशा स्थापित))। अन्य सभी आवेदनों के लिए आपको सिस्टम को बताने में सक्षम होना चाहिए कि आप किस एप्लिकेशन के संसाधनों तक पहुंचना चाहते हैं। आप संदर्भ का उपयोग कर ऐसा करते हैं।

+0

+1। आपके संदेश का दूसरा भाग एक दिलचस्प विचार है। लेकिन आईएमएचओ, यह जवाब नहीं है। गतिविधि के उदाहरण संदर्भ में एप्लिकेशन संसाधनों तक पहुंच है। यह आवेदन में हर गतिविधि के लिए सही है। लेकिन उनकी कक्षाएं भी आवेदन से संबंधित हैं। केवल गतिविधियों के उदाहरण संसाधनों को देखते हैं, लेकिन गतिविधियों की कक्षाओं में नहीं? वे ** एंड्रॉइड सिस्टम से संबंधित नहीं हैं **। – Gangnus

+0

कक्षा में स्थिर जानकारी संकलन समय पर उत्पन्न होती है। लेकिन आप संकलन समय पर एप्लिकेशन को आईडी नहीं कर सकते हैं, क्योंकि आप उस पल में अद्वितीय आईडी की गारंटी नहीं दे सकते हैं। संदर्भ द्वारा प्रतिनिधित्व किए गए आपके आवेदन का केवल उदाहरण (एप्लिकेशन प्रारंभ होने पर उत्पन्न होता है) इस समय एंड्रॉइड सिस्टम द्वारा उत्पन्न एक अद्वितीय आईडी देता है। आपको स्थिर पहुंच देने के लिए लॉन्चर को कोड को संशोधित करना पड़ा। – Stefan

+0

मेरी उपरोक्त टिप्पणी में "कक्षा लोडिंग समय" द्वारा "संकलित समय" को प्रतिस्थापित करें। इसका मतलब है कि वर्ग लोडर जानकारी इंजेक्ट करने में सक्षम होगा। हालांकि, यह नहीं है। – Stefan

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