2010-08-31 12 views
11

एंड्रॉइड पर स्क्लाइट आपको पढ़ने के लिए एकाधिक प्रोसेस से डेटाबेस तक पहुंचने देता है, लेकिन यदि आप वर्तमान में एक प्रक्रिया से लिख रहे हैं, तो अन्य प्रोसेस से पढ़ और लिखना अपवाद फेंक देगा क्योंकि पहले लिखने में एक ताला है डीबी परअपवादों के बिना एंड्रॉइड स्क्लाइट समेकन

"procs" से मेरा मतलब है एक ही ऐप में अन्य धागे।

क्या कोई धागा बस एक मानक तरीका है जब तक डेटाबेस उपलब्ध नहीं हो जाता है, संभवतः एक निर्दिष्ट टाइमआउट के साथ, अपवाद फेंकने के बजाय?

"आप ऐसा क्यों कर रहे हैं" की उम्मीद कर रहे हैं? जवाब, यह वैसे ही हम इसे कर रहे हैं, और यही वह है। हम एक सामग्री प्रदाता का उपयोग नहीं करेंगे। बस डीबी एक्सेस सिंक्रनाइज़ करने का एक तरीका चाहते हैं।

मान लीजिए कि ऐसा करने का कोई मानक तरीका नहीं है, हम शायद कुछ थ्रेड सिंक्रनाइज़ेशन करने के लिए डीबी कॉल के चारों ओर एक रैपर लिखना बंद कर देंगे।

उत्तर

17

जब तक आप उसी SQLiteDatabase ऑब्जेक्ट का उपयोग कर रहे हैं, तो सिंक्रनाइज़ेशन आपके लिए किया जाता है।

तो यदि आप एक सिंगलटन के माध्यम से ऑब्जेक्ट तक पहुंचते हैं, तो कोई समस्या नहीं होनी चाहिए। हालांकि यदि आप टाइमआउट को कार्यान्वित करना चाहते हैं तो आप कुछ और तर्क जोड़ना चाहेंगे, उदा। प्रतीक्षा करें/सूचित करें या कुछ इसी तरह।

+0

तो, आप 1 SQLiteOpenHelper का उपयोग कर रहे हैं, और फिर अपने पूरे ऐप के लिए 1 लिखने योग्य कनेक्शन कह रहे हैं? सभी गतिविधियों और सेवाओं? –

+4

मेरे पास इस जवाब को अंगूठे लगाने के लिए पर्याप्त "कठोर" नहीं है, लेकिन इससे मुझे सही उत्तर के मार्ग का नेतृत्व किया गया। SQLiteOpenHelper वास्तव में एक ही कैश किए गए ऑब्जेक्ट को लौटाता है, भले ही आप "getReadable ..." या "getWritable ..." को कॉल करते हैं, फिर डेटाबेस ऑब्जेक्ट के पास कोई जावा लॉक ऑब्जेक्ट है, यह सुनिश्चित करने के लिए कि कोई भी कॉल, पढ़ या लिखना क्रमबद्ध है। मुझे एक सिंगलटन SQLiteOpenHelper रखना होगा, जो मुझे समय-समय पर डीबी ऑब्जेक्ट्स को "बंद" करने देगा, जो "सुरक्षित" लगता है। स्क्लाइट स्वयं कई पढ़ने वाले क्लाइंट को संभाल सकता है, जो तार्किक रूप से बेहतर प्रदर्शन करने लगते हैं, लेकिन जो भी हो। फिर से धन्यवाद। –

+0

@ कागी प्रश्न पूछने वाले के रूप में, आप इस उत्तर को स्वीकार कर सकते हैं, या अपना उत्तर लिख सकते हैं और स्वीकार कर सकते हैं कि – ohhorob

2

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

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