2013-03-10 5 views
5

मैं एंड्रॉइड विकास (फ्रैंक होने के लिए समग्र विकास के लिए) के लिए नया हूं, और इस तरह मैं कॉमन्सवेयर व्यस्त कोडर की मार्गदर्शिका पढ़ रहा हूं। SQLite अनुभाग के माध्यम से पढ़ते समय, कुछ ऐसी चीजें हैं जो मुझे 100% स्पष्ट नहीं हैं। नीचे वह है जो मुझे विश्वास है कि साथ ही कुछ प्रश्न भी चल रहे हैं। अगर मैं अपनी विचार प्रक्रिया में गलत हूं तो कृपया मुझे सही करें।SQLiteOpenHelper Instantiate करने के लिए गतिविधि संदर्भ या अनुप्रयोग संदर्भ के बीच निर्णय

लेखक पता चलता है कि आप अपने आवेदन में सिर्फ एक की तुलना में अधिक गतिविधि से एक डेटाबेस का उपयोग करने जा रहे हैं, आप संदर्भ संदर्भ प्रत्येक गतिविधि से SQLiteOpenHelper का दृष्टांत के लिए उपयोग नहीं करना चाहिए। इसके बजाय, आपको गतिविधि द्वारा प्रदत्त getApplicationContext() का उपयोग करना चाहिए।

ऐसा करके, वह इस तथ्य का उपयोग करता है कि getApplicationContext() आवेदन प्रक्रिया शुरू होने के तुरंत बाद बनाए गए संदर्भ के सिंगलटन उदाहरण को पुनर्प्राप्त करता है। यहां मेरा प्रश्न उठता है। मुझे लगता है कि यदि मैं SQLiteOpenHelper को तत्काल करते समय गतिविधि (इस कीवर्ड) द्वारा प्रदान किए गए संदर्भ का उपयोग करना था, तो प्रत्येक गतिविधि SQLiteOpenHelper का अपना उदाहरण बनायेगी। ऐसा लगता है कि केवल गतिविधि के संदर्भ का उपयोग करने से एप्लिकेशन संदर्भ को सूचित नहीं किया जाता है कि पहले से ही SQLiteHelper का एक उदाहरण है, और इसलिए, यह मौजूदा एक का उपयोग करने के बजाय एक नया बनाता है। क्या मेरी सोच सही है?

मैं एंड्रॉइड ओएस द्वारा प्रदान की जाने वाली जानकारी और संसाधन प्राप्त करने के लिए डेवलपर के "गेटवे" के रूप में संदर्भ (और मुझे गलत है) के बारे में सोचता हूं (यानी getSystemService() के माध्यम से सिस्टम सेवा को पकड़ना)। लेकिन इसका उपयोग करके (गतिविधि से) या getApplicationContext() का उपयोग करके अलग-अलग प्रभाव पड़ते हैं। इसका उपयोग करने से, कॉन्टेक्स्ट का एक उदाहरण मिलेगा जो आपकी वर्तमान गतिविधि के लिए "स्थानीय" है, लेकिन getApplicationContext() का उपयोग पूरे एप्लिकेशन को संदर्भित करता है। यदि यह सही है, तो इसका मतलब यह है कि जब मैं getApplicationContext() को पर SQLiteOpenHelper के कन्स्ट्रक्टर का संदर्भ पास करता हूं तो यह मेरे पूरे एप्लिकेशन को यह बताएगा कि मेरे SQLiteOpenHelper का एक उदाहरण पहले से ही बनाया गया है। SQLiteOpenHelper एप्लिकेशन को इसके बारे में कैसे पता चलेगा? क्या यह कुछ स्थिर विधि का उपयोग सार्वजनिक/निजी स्थैतिक डीबीक्रेटेड (संदर्भ संदर्भ) {// संदर्भ को पता है कि इस चलने का एक उदाहरण है} एप्लिकेशन को जानने के लिए?

मुझे खेद है कि यह भ्रमित है।

धन्यवाद समय

से आगे
+0

प्रश्न क्या है? – Neolisk

+0

क्षमा करें अगर यह भ्रमित है। प्रश्न तीसरे और चौथे पैराग्राफ के अंत में हैं। – Emmanuel

+0

यह निश्चित है। मैं एक प्रश्न की तलाश में हूं, जिसका उत्तर एसओ के दायरे में दिया जा सकता है। आपका अब तक बहुत व्यापक है। – Neolisk

उत्तर

5

मैं अब तक लगता है कि मैं प्रसंग की अवधारणा का एक बेहतर समझ की क्या ज़रूरत है। मैं एक लिंक साझा करना चाहता हूं जो मैंने पाया जो इस विषय को स्पष्ट करता है। http://t.co/9R0bPWiKc5

2

अपने दूसरे प्रश्न के लिए, यदि मैं इसे सही ढंग से समझता हूं, तो संदर्भ किसी प्रकार का Registry of Singletons है। तो SQLiteOpenHelper अभी दिए गए संदर्भ से बनाया गया है और उससे जुड़ा हुआ है। SQLiteOpenHelper प्राप्त करने के लिए इस संदर्भ का उपयोग करने वाली प्रत्येक चीज उस बंधे उदाहरण को प्राप्त करेगी।

+0

जानकारी के लिए धन्यवाद। +1। – Emmanuel

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