У меня есть список просмотров в каждом действии в моем приложении. Для каждого getView() я создаю поток, чтобы открыть базу данных Sqlite и закрыть ее после (в каждом потоке). Но я получил ошибку блокировки базы данных.Когда закрыть базу данных Sqlite
Примечание: Приложение может иметь как 6 потоков, выполняющихся в то же время, используя каждый там собственный SQLiteOpenHelper
Так что, когда Android сказал, чтобы закрыть базу данных, когда не требуется, он говорит о закрытии, когда приложение в фоновом режиме или для каждого запроса с использованием транзакции или нет?
Код:
public class TemporarySqliteDB extends SQLiteOpenHelper{
public TemporarySqliteDB(Context context) {
super(context, "Temporary", null, 1);
}
//..........
}
public class DaoImage{
private SQLiteDatabase writableDatabase;
public DaoImage(Context ctx) {
writableDatabase = new TemporarySqliteDB(ctx).getWritableDatabase();
}
public void close() {
writableDatabase.close();
}
}
В моей нити перспективе()
//this give locked error while instanciating
DaoImage daoImage = null;
try {
daoImage = new DaoImage(ctx.get());
//.....
}finally {
if(daoImage != null)
daoImage.close();
}
//This without error
DaoImage daoImage = new DaoImage(ctx.get());
//....
без закрытия базы данных я вижу использование памяти в порядке. Но я не знаю, лучше ли оставлять базу данных открытой.
Это замечательно. вот что я искал. Но использование шаблона singleton позволяет вам закрывать и открывать БД один раз, потому что, пытаясь открыть БД, когда он уже закрыт, дайте это исключение: ** java.lang.IllegalStateException: попытка повторно открыть уже закрытый объект: SQLiteDatabase: * * – user3502626