मेरे पास डेटा एक्सेस के आसपास एक सामान्य एंड्रॉइड डिज़ाइन प्रश्न है। मेरे पास मेरे एप्लिकेशन में कई गतिविधियां हैं जिन्हें SQLite डेटाबेस तक पहुंचने की आवश्यकता है। एक ही स्थान पर सभी डेटा एक्सेस लॉजिक को लपेटने के लिए मैंने एक डाटाबेस हैंडलर क्लास बनाया है जो सभी डेटा एक्सेस लॉजिक का ख्याल रखता है। यह वर्ग क्वेरी के परिणाम पुनर्प्राप्त करने और कॉलर को वापस लाने के लिए डेटाबेस कहकर, परिणामी कर्सर से पूछताछ करने और पूछताछ करने वाले क्लॉज का निर्माण करने का ख्याल रखता है। इस वर्ग का उद्देश्य सभी डेटा एक्सेस कोड को एक ही स्थान पर लपेटना है ताकि सभी गतिविधियों में बिखरे हुए डाटा एक्सेस लॉजिक होने के विरोध में इसे आसानी से प्रबंधित और बनाए रखा जा सके। प्रत्येक गतिविधि जिसे डेटाबेस तक पहुंच की आवश्यकता होती है, इस डेटाबेस हैंडलर क्लास का एक उदाहरण बनाता है और इसे android.content.Context का संदर्भ देता है। इसके बाद डेटाबेस हैंडलर क्लास अंतर्निहित सामग्री प्रदाता को कॉल करने के लिए इस संदर्भ ऑब्जेक्ट का उपयोग करता है जैसा कि context_i.getContentResolver() क्वेरी (...) है।एंड्रॉइड डाटाबेस एक्सेस डिजाइन दृष्टिकोण
मेरा डेटा एक्सेस तर्क (कर्सर हैंडलिंग तर्क विशिष्ट होने के लिए) गतिविधि में नहीं है और इसलिए मैं कर्सर जीवन चक्र का प्रबंधन नहीं कर सकता, इसलिए स्मृति रिसाव होने की संभावना है।
- मैं कैसे (इसके भी संभव हो तो) एक गतिविधि बाहर से कर्सर जीवन चक्र प्रबंधन कर सकते हैं -
मेरे सवालों का इस प्रकार हैं?
- क्या प्रत्येक गतिविधि भी इस डेटा हैंडलर क्लास का उदाहरण बना रही है और इसमें संदर्भ का एक उदाहरण गुजर रहा है? शायद मेरा डिज़ाइन दृष्टिकोण गलत है और मुझे इन डेटा एक्सेस फ़ंक्शंस को स्थिर विधियों के रूप में बेनकाब करना चाहिए जो कॉलम गतिविधि का उदाहरण पैरामीटर के रूप में लेते हैं। इस तरह से मैं प्रबंधित प्रश्नों को निष्पादित कर सकता हूं और गतिविधि को कर्सर जीवन चक्र के प्रबंधन की देखभाल करने देता हूं?
मैं वास्तव में सर्वोत्तम दृष्टिकोण की समझ प्राप्त करना चाहता हूं। किसी भी सलाह बहुत सराहना की जाएगी
आपका जवाब जूरी के लिए धन्यवाद कहते हैं लेकिन मुझे लगता है कि आप शायद सवाल पढ़ने में भूलना। मेरे पास पहले से ही सामग्री प्रदाता और डेटा एक्सेस ऑब्जेक्ट है। (मैंने उन्हें थोड़ा स्पष्ट करने के लिए ऊपर से थोड़ा से प्रश्नों को संशोधित किया है)। 1. मैं (यदि यह भी संभव हो) कर्सर जीवन चक्र को गतिविधि से बाहर (मेरे डेटा एक्सेस ऑब्जेक्ट के अंदर) कैसे प्रबंधित कर सकता हूं? 2. क्या प्रत्येक गतिविधि इस डेटा एक्सेस ऑब्जेक्ट का उदाहरण बना रही है और इसमें संदर्भ का एक उदाहरण गुजर रहा है? शायद डीएओ को स्थैतिक तरीकों का पर्दाफाश करना चाहिए ताकि प्रत्येक गतिविधि को डेटा एक्सेस ऑब्जेक्ट का उदाहरण बनाने की आवश्यकता न हो? – Brian
मैंने गतिविधि के बाहर कर्सर को संभालने के लिए पहले से ही एक उदाहरण प्रदान किया है, यानी आपके डीएओ ऑब्जेक्ट में। बेशक आपको अपने दाओ ऑब्जेक्ट्स के सिंगलटन उदाहरण बनाने पर विचार करना चाहिए, यदि आप अब तक देखभाल करते हैं तो स्थिर लोग यूनिट परीक्षण के लिए आम तौर पर खराब होते हैं। – Juri