2012-07-12 9 views
5

यह शीर्षक थोड़ा पागल लग सकता है, लेकिन यह मुझे भ्रमित कर रहा है। मेरा ऐप स्थानीय डेटाबेस संचालन का भारी उपयोग करता है। जैसा कि एंड्रॉइड दस्तावेज़ों और कुछ ब्लॉगों में सुझाया गया है, मैंने SQLiteOpenHelper कक्षा को बढ़ाया और मेरे सभी डीबी परिचालनों को परिभाषित किया। चूंकि मेरे कुछ डीबी ऑपरेशंस थ्रेड में निष्पादित होते हैं, डीबी के उद्घाटन और समापन के कारण कुछ IllegalStateExceptions होते हैं। इसलिए, मैंने अपने डीबी सहायक को Singleton के रूप में बनाया और यह उन समस्याओं को हल किया, 0 डीऔर close प्रत्येक डीबी कार्रवाई के लिए संचालन से छुटकारा पा लिया। अब सब ठीक काम कर रहा है भले ही मैं कभी डीबी बंद नहीं करता।यदि मैं एंड्रॉइड में डेटाबेस बंद नहीं करता तो क्या होगा?

  • मेरा भ्रम यह है कि डीबी को बंद करना आवश्यक है?
  • यदि हां, तो ऐसा करने के लिए सही जगह क्या है, क्या यह मुख्य गतिविधि के onDestroy में है या कहीं और?
  • यदि मैं डीबी बंद नहीं करता, तो दुष्प्रभाव क्या हैं?

उत्तर

0

यदि आप एक ही डेटाबेस को फिर से खोलने का प्रयास करेंगे तो आप IllegalStateException पकड़ सकते हैं।

यदि आप DBHelper का उदाहरण onCreate में मुख्य गतिविधि की विधि बनाते हैं - यह onDestroy में डीबी को बंद करने के लिए लिखा जाएगा। तो, आप सुनिश्चित हो सकते हैं कि अगली बार onCreate में आपका डेटाबेस पहले से खोला नहीं गया है।

यदि आपके पास सेवा में DBHelper का संदर्भ है, तो इसे सेवा में खोला और बंद किया जाना चाहिए, न कि गतिविधि में।

तुम भी डाटाबेस खोलने के लिए Application वर्ग का उपयोग कर सकते हैं, लेकिन की तुलना में यह हर बार खोला जाएगा आप शुरू होता एप्लिकेशन जब (उदाहरण के लिए आप को प्राप्त होने वाली BroadcastReceiver)

0

कारण है कि आप अपवाद मिलता है कि आप की कोशिश कर रहे है विभिन्न धागे के माध्यम से एक ही डेटाबेस से लिखें/पढ़ें।

मुझे विश्वास है कि आपके डेटाबेस को बंद करने का सबसे अच्छा स्थान मुख्य सक्रियता के अंदर होगा।

0

मुझे एक ही समस्या का सामना करना पड़ा। मैंने डेटाबेस खोला, कुछ ऑपरेशन किया और मैं बंद करना भूल गया। असल में मैंने कुछ अपवादों को देखा जो मुझे "लीक मिला" डीबी खोला गया है और कभी नहीं बंद किया गया है।

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

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