2012-08-09 9 views
15

मेरे पास Cursor से संबंधित कुछ प्रश्न हैं।कर्सर बंद करने के एंड्रॉइड नुकसान

मुझे पता है कि एक Cursor बंद करने नहीं का नुकसान क्या हैं करना चाहते हैं?

यह संसाधनों को अस्वीकार करता है, लेकिन कौन से संसाधनों को हटा दिया जाता है?

यदि हम Cursor को बंद नहीं करते हैं? परिणाम क्या होंगे और किस हद तक?

Cursor को बंद नहीं करना Activity थोड़ा सा प्रभावित नहीं करता है, लेकिन यह लॉग बिल्ली में त्रुटि देता है।

उत्तर

-2

आप तो कर्सर बंद नहीं करते हैं तो आप अपने डेटाबेस में अपने डेटा को एक्सेस करने में समस्या होगा क्योंकि जबकि डेटाबेस खुला है, यह नहीं सुलभ कुछ होना चाहिए गतिविधि की तरह या रुका हुआ है अन्यथा है। विशेष रूप से, यदि आप गतिविधि को प्रबंधित करते हैं तो इस समस्या को कम किया जा सकता है।

+0

मैंने अपने कोड में कर्सर को बंद नहीं किया है, और यह डेटा को सही तरीके से प्रदर्शित कर रहा है, मैं डेटा एक्सेस कर रहा हूं और ऐप ठीक चल रहा है, यह केवल लॉगकैट में त्रुटि दे रहा है कि एक कर्सर को अंतिम रूप दिया गया है या – Haris

+0

बंद नहीं किया गया है कर्सर को नियंत्रित करने वाली गतिविधि का अर्थ क्या आपने प्रबंधन कर्सर (एक्स) का उपयोग किया था? – JoxTraex

+0

नहीं, यह प्रबंधन के बिना काम कर रहा है कर्सर – Haris

7

Cursor को बंद करने से किसी भी संभावित मेमोरी लीक से बच जाएगा, इसलिए हाँ अब उपयोग किए जाने पर उन्हें हमेशा बंद होना चाहिए।

+0

जावा सभी मेमोरी मुद्दों को ही संभालता है? इस मामले में क्या विशेष संसाधन? मुझे पता है कि यह करीब होना चाहिए, मैं बस जानना चाहता हूं क्यों? – Haris

+0

ए 'कर्सर' के पीछे मूल संसाधन हैं जैसे फ़ाइल हैंडल (याद रखें, एक SQLite डेटाबेस अनुक्रमित फ़ाइलों का उपयोग करता है)। साथ ही, एक साइड नोट के रूप में, 'अंततः' ब्लॉक में कर्सर को बंद कर दिया जाना चाहिए ताकि वे बंद हो जाएं। –

+1

कौन सा मूल संसाधन? और वे कितने हानिकारक हैं? या चरम नुकसान का कारण नहीं है? – Haris

3

कर्सर केवल एक इंटरफ़ेस है। एक बहुत कार्यान्वयन पर निर्भर करता है, क्या विशिष्ट वर्ग है कि इंटरफ़ेस का उपयोग कर रहे लागू करता है ...

SQLiteCursor के मामले में, वहाँ काफी कुछ चीजें साफ-हो रही हैं (इस Froyo से है):

@Override 
public void close() { 
    super.close(); 
    deactivateCommon(); 
    mQuery.close(); 
    mDriver.cursorClosed(); 
} 

नहीं अपने कर्सर को बंद करने, डेटा अभी भी अनुरूप होना चाहिए, लेकिन आप स्मृति रिसाव ...

3

मुझे नहीं लगता कि आप एक कर्सर को बंद करने के भूल से कई मुद्दों देखेंगे जा रहे हैं। मुद्दा (और यह लगभग किसी भी स्मृति रिसाव पर लागू होता है) यह है कि यदि आप इसे बार-बार करते रहते हैं, तो आखिर में कुछ बुरा होगा।

उदाहरण के लिए, मैं एक सर्वर के लिए एक उपकरण के SQLite DB से एक ऐप्लिकेशन है जो डेटा अपलोड लिखा था। अगर मैंने कर्सर को बंद नहीं किया था, तो मुझे डेटाबेस से पढ़ने और लिखने के लिए हर बार किया गया था, अंत में मैं आउट-ऑफ-मेमोरी त्रुटियों और कई अन्य मुद्दों में भाग लेगा।

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