je voudrais le garder ouvert tout le temps, et proche d'une certaine cycle de vie de la méthode telle qu' onStop
ou onDestroy
. de cette façon, vous pouvez facilement vérifier si la base de données est déjà en cours d'utilisation en appelant isDbLockedByCurrentThread
ou isDbLockedByOtherThreads
sur le single SQLiteDatabase
objet à chaque fois avant de l'utiliser. cela permettra d'éviter de multiples manipulations de la base de données et enregistrer votre application à partir d'un crash potentiel
donc, dans votre singleton, vous pouvez avoir une méthode de ce genre pour obtenir votre seul SQLiteOpenHelper
objet:
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;
}
donc, lorsque vous voulez utiliser votre ouverte objet d'assistance, appeler cette méthode de lecture(assurez-vous qu'il est filetée)
une autre méthode dans votre singleton peut être(appelée à CHAQUE FOIS avant de vous essayer à l'appel de la lecture ci-dessus):
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
}
}
vous pouvez fermer la base de données dans le singleton:
public void finalize() throws Throwable {
if(null != mySingletonHelperField)
mySingletonHelperField.close();
if(null != db)
db.close();
super.finalize();
}
si les utilisateurs de votre application ont la possibilité de créer de nombreuses base de données des interactions très rapidement, vous devriez utiliser quelque chose comme je l'ai démontré ci-dessus. mais si il est minime base de données des interactions, je ne serais pas s'inquiéter à ce sujet, et il suffit de créer et de fermer la base de données à chaque fois.