я тримав би його відкритим весь час і закрив би його за допомогою певного методу життєвого циклу, такого як onStopабо onDestroy. таким чином, ви можете легко перевірити, чи вже використовується база даних, за допомогою виклику isDbLockedByCurrentThreadабо isDbLockedByOtherThreadsна одному SQLiteDatabaseоб'єкті кожного разу, перш ніж використовувати її. це запобіжить багаторазові маніпуляції з базою даних та врятує вашу програму від потенційного збою
отже, у вашому одиночному, у вас може бути такий метод, як отримати ваш єдиний SQLiteOpenHelperоб’єкт:
private SQLiteDatabase db;
private MyDBOpenHelper mySingletonHelperField;
public MyDBOpenHelper getDbHelper() {
db = mySingletonHelperField.getDatabase();//returns the already created database object in my MyDBOpenHelper class(which extends `SQLiteOpenHelper`)
while(db.isDbLockedByCurrentThread() || db.isDbLockedByOtherThreads()) {
//db is locked, keep looping
}
return mySingletonHelperField;
}
тому, коли ви хочете використовувати свій відкритий допоміжний об'єкт, викличте цей метод отримання (переконайтеся, що він різьбовий)
може бути інший метод у вашому одиночному (щоразу називається КОЖНИЙ раз перед тим, як спробувати викликати геттер):
public void setDbHelper(MyDBOpenHelper mySingletonHelperField) {
if(null == this.mySingletonHelperField) {
this.mySingletonHelperField = mySingletonHelperField;
this.mySingletonHelperField.setDb(this.mySingletonHelperField.getWritableDatabase());//creates and sets the database object in the MyDBOpenHelper class
}
}
можливо, ви також захочете закрити базу даних в односторонній програмі:
public void finalize() throws Throwable {
if(null != mySingletonHelperField)
mySingletonHelperField.close();
if(null != db)
db.close();
super.finalize();
}
якщо користувачі вашого додатку мають можливість створити багато взаємодій з базами даних дуже швидко, вам слід використовувати щось на зразок того, що я продемонстрував вище. але якщо існує мінімальна взаємодія з базою даних, я б не хвилювався про це, а просто створював і закривав базу даних щоразу.