2011-09-20 24 views
11

Android दस्तावेज़ कहते हैंथ्रेड-सुरक्षित सामग्री प्रदाता कैसे बनाएं?

ContentProvider तरीकों विभिन्न प्रक्रियाओं और धागे में वस्तुओं विभिन्न ContentResolver से कहा जा सकता है, वे एक धागा सुरक्षित तरीके से

में लागू किया जाना चाहिए और मैं पर इस पोस्ट पाया Stackoverflow Android - sqlite content providers and multithreading जो कहता है कि यह थ्रेड सुरक्षित है ??

तो, बस सोच रहा है कि थ्रेड-सुरक्षित ContentProvider कैसे बनाएं? यह पर्याप्त है अगर मैं सम्मिलित/अपडेट करना/तरीकों syncronized

public synchronized Uri insert (Uri uri, ContentValues values) { 

} 
+0

मेरे पास एक ही डेटाबेस/तालिका – kakopappa

+0

में डेटा डालने वाले कई धागे हैं, कृपया अन्य लोगों ने क्या लिखा है: [एंड्रॉइड पर SQLite के लिए सर्वोत्तम प्रथाओं क्या हैं?] (Http://stackoverflow.com/questions/2493331/ क्या-हैं-सर्वोत्तम प्रथाओं के लिए SQLite-ऑन-एंड्रॉयड/3689883 # 3689883)। यह आपके लिए चीजों को स्पष्ट करना चाहिए। – JJD

+0

हाँ, लेकिन क्या होगा यदि आपके पास – JPM

उत्तर

11

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

+1

अपडेट करने और हटाने के लिए एकाधिक थ्रेड हैं, भले ही आप प्रत्येक विधि सिंक्रनाइज़ करते हैं ... अद्यतन करने के अनुरोध को रोकें और एक ही समय में आने वाले हटाने को हटाने का अनुरोध, जिससे थ्रेड सुरक्षा हो सकती है। मुझे लगता है कि इन तरीकों में से प्रत्येक को जारी रखने से पहले एक सेमफोर को साफ़ करने की प्रतीक्षा करनी होगी। या बेहतर अभी तक ये विधियां सभी कतार का उपयोग करती हैं ... – JPM

+4

@ जेपीएम हाँ, आप बिल्कुल सही हैं। यदि आप अंतर्निहित स्रोत के रूप में 'SQLiteDatabase' का उपयोग कर रहे हैं, तो इससे कोई फर्क नहीं पड़ता (' SQLiteDatabase' थ्रेड सुरक्षित है)। इसके अलावा, कोई गारंटी नहीं है ... आपको या तो डेटा स्रोत सिंक्रनाइज़ करना होगा या 'ContentProvider' तक पहुंच सिंक्रनाइज़ करना होगा (मैं पूर्व का सुझाव दूंगा)। –

+0

सामग्री प्रदाता का उपयोग करने वाले डेटासोर्स/डेटाबेस हेल्पर क्लास को आप सिंक्रनाइज़ कैसे करेंगे? शायद मुझे इसे एक प्रश्न के रूप में पूछना चाहिए ... ऐसा लगता है कि कुछ लोगों ने इस साइट पर उत्तर नहीं दिया है। – JPM

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