में SQLite डेटाबेस कर्सर के बारे में कुछ सवाल अपने आवेदन मैं पीछा किया Lars Vogel tutorial में डेटाबेस का उपयोग लागू करने के लिए, लेकिन मैं बहुत चीजों की एक जोड़ी के बारे में उलझन हूँ ...एंड्रॉयड
1) हर बार जब एक फोन है fetchTodo
पर बनाया गया एक नया कर्सर बनाया और वापस कर दिया जाएगा। कचरा कलेक्टर के लिए पिछले कर्सर छोड़ना। इसलिए, अगर मैं उस मामले के लिए startManagingCursor
या CursorLoader
का उपयोग नहीं करता, तो क्या मुझे कर्सर पर .close()
कॉल करना चाहिए जब मैं इसके साथ करूँ?
Cursor cursor = mNotesAdapter.fetchTodo();
// do something...
cursor.close();
मैं इस कर्सर पूरा कर लेने और नया लाने के लिए अगले पर बनाया जाएगा, मैं तो इस तरह यह बंद हो जाना चाहिए या मैं इसे कचरा कलेक्टर के लिए छोड़ देना चाहिए: निश्चित रूप से fetchTodo
गुंजाइश है, उदाहरण के के बाहर ? हालांकि मुझे लगता है कि मैं लगभग 2 चीजों के बारे में पूरी तरह से अलग बात कर रहा हूं ... प्वाइंट होने के नाते, क्या मुझे इसे उपर्युक्त उदाहरण में बंद करना चाहिए या नहीं?
2)Cursor
भी एक .deactivate()
विधि है और प्रलेखन यह कम संसाधनों का उपयोग करता (सक्रिय कर्सर से) कहते हैं। मुझे इसका उपयोग कब करना चाहिए? उदाहरण के लिए, मेरे ऐप में, मेरे पास ListActivity
है जो SimpleCursorAdapter
के माध्यम से पॉप्युलेट किया गया है (इसके लिए कोड प्रारंभिक केवल एक बार कहा जाता है)। इस्तेमाल किया जाने वाला कर्सर एक वर्ग सदस्य चर है, क्योंकि मुझे उस विधि के बाहर इसकी आवश्यकता है जो सूची को पॉप्युलेट करता है। जब डेटाबेस से कुछ हटा दिया जाता है तो मुझे डेटाबेस की आवश्यकता होती है। लेकिन जब तक कोई रिकॉर्ड हटा नहीं जाता है, जो उपयोगकर्ता क्रिया है और इसमें कुछ समय लग सकता है, तो क्या मुझे कर्सर को इस दौरान निष्क्रिय करना चाहिए? क्योंकि जब मैं .requery()
को दोबारा कॉल करता हूं तो यह फिर से सक्रिय होगा। या SimpleCursorAdapter
काम करना बंद कर रहा है क्योंकि कर्सर सक्रिय नहीं है?
संपादित करें: मैंने अभी इसका परीक्षण किया और पाया कि मैं कर्सर एडाप्टर सेट अप करने के बाद deactivate()
पर कॉल नहीं कर सकता। यदि कर्सर सक्रिय नहीं है, तो सूची खाली होगी, इसलिए जब तक ListActivity प्रदर्शित होती है तब तक इसे सक्रिय रहने की आवश्यकता होती है। अंत में, हमें StartManagingCursor
इसे तब संभालना चाहिए। या नया CursorLoader
।
3) मुझे पता है कि startManagingCursor
/stopManagingCursor
पदावनत कर रहे हैं, लेकिन मैं जा रहा है लक्षित कर रहा हूँ नहीं हनीकोम्ब (कम से कम समय के लिए) और मैं अब के लिए नए CursorLoader
से निपटने के लिए नहीं करना चाहती। लेकिन उपरोक्त ट्यूटोरियल में, startManagingCursor
हर जगह प्रयोग किया जाता है, लेकिन stopManagingCursor
कभी कभी नहीं कहा जाता है। क्यों नहीं? क्या एंड्रॉइड इसके साथ अपने तरीके से संबंधित है? किसी भी स्थिति को मुझे stopManagingCursor
पर कॉल करना चाहिए?
# 1 मैंने उस प्रश्न पर अपने विचारों का पूरी तरह से गलत व्याख्या की, मुझे इसे फिर से लिखना होगा ... # 2 हां, मेरा मतलब था 'निष्क्रिय करें' (टाइपो)। मुझे 'लोडर प्रबंधक' का उपयोग करने के तरीके पर वास्तव में कोई अच्छा दस्तावेज नहीं मिल रहा है, यहां तक कि यहां SO प्रश्नों में भी नहीं।# 3 मैं बिंदु को समझता हूं, लेकिन अगर मुझे 'stopManagingCursor' का उपयोग नहीं करना है, तो मैंने 'startManagingCursor'' पर कॉल किया है, तो यह विधि पहले स्थान पर क्यों मौजूद है? –
मैं सिर्फ पूरे प्रश्न # 1 @ फिलिप को फिर से लिखता हूं, यदि आप एक नज़र डाल सकते हैं ... –
इसके अलावा, बस # 2 का जवाब मिला; सवाल जवाब के साथ एक बार फिर से संपादित किया। –