Об этом нужно позаботиться за пределами вашего SQLiteOpenHelper
.
Вам необходимо закрыть подключение к базе данных в любое время, когда ваша деятельность или служба приостановлена / остановлена.Если вы этого не сделаете, Android сгенерирует исключение, которое вы постоянно видите в LogCat.
Лучший способ для этого зависит от того, есть ли у вас глобальный или локальный объект БД.
Местное Используйте блок try catch finally
.Откройте свою базу данных в попытке, а затем закройте ее окончательно.Таким образом, независимо от того, произошла ошибка или нет, ваша база данных закрыта.
OpenHelper dh = new DatabaseHelper(this);
SQLiteDatabase db = null;
try {
db = dh.getWritableDatabase();
} catch(SQLiteException e){
} finally {
if(db != null && db.isOpen())
db.close();
}
Global Используйте жизненный цикл Android для управления вашей базой данных.Откройте базу данных в onResume
и закройте ее в onPause
.
OpenHelper dh = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
dh = new DatabaseHelper(this);
}
@Override
protected void onResume() {
this.db = dh.getWritableDatabase();
}
@Override
protected void onPause( {
if(db != null && db.isOpen()){
db.close();
}
}
Что касается вашей проблемы Service
.Читайте о Service Lifecycle .Вы можете использовать шаблон, который я реализовал в разделе Global .