निम्नलिखित पर विचार करें: मुझे Service
मिल गया है, जो AsyncTask
में डीबी में लिखता है। और मेरी गतिविधि डीबी से डेटा पढ़ती है (सादगी के लिए यूआई थ्रेड पर विचार करें)। मैं SQLiteOpenHelper
का उपयोग कर डीबी तक पहुंचता हूं। मैं Application onCreate() में एकल उदाहरण बना देता हूं और फिर इसे सेवा और गतिविधि में प्राप्त करता हूं। क्या कोई संभावना है कि मुझे अपना डीबी 'मृत लॉक' मिलेगा? पहले, मैंने इस तरह के संचालन के लिए ContentProvider का उपयोग किया था। हालांकि, यह एकल SQLiteOpenHelper
उदाहरण का उपयोग करने पर आधारित है, मैंने ContentProvider
को छोड़कर अपनी परियोजना को सरल बनाने का निर्णय लिया।SQLite डीबी एकाधिक धागे से
public class App extends Application {
private OpenHelper openHelper;
@Override
public void onCreate(){
super.onCreate();
openHelper=new OpenHelper();
}
public OpenHelper getHelper(){
return openHelper;
}
}
गतिविधि में:
कोड पर विचार करें
OpenHelper helper=(App)getApplication().getHelper();
SQLiteDatabase db=helper.getReadableDatabase();
// Do reading
और serice अंदर, अलग थ्रेड में:
OpenHelper helper=(App)getApplication().getHelper();
SQLiteDatabase db=helper.getWritableDatabase();
//Do writing
यह सुरक्षित होगा?
UPDThis समाधान हो सकता है, लेकिन यह सुनिश्चित नहीं है कि इसका उपयोग कैसे किया जाए।
startTransactionNonExclusive() मुझे त्रुटि देता है कि यह उपरोक्त api11 के लिए है। लेकिन मेरे ऐप्स min api 10 है। सरल मोड के साथ स्क्लाइट का उपयोग करने का कोई अन्य तरीका? –