У меня нет особого опыта в разработке под Android, я занимаюсь разработкой уже год. Я искал эту проблему, но не смог точно найти эту конкретную проблему.
Поэтому я занимаюсь разработкой приложения и использую SQLiteOpenHelper для управления своей базой данных. Все идет нормально. Мне приходится звонить в базу каждые пару секунд. Я много читал о том, как правильно управлять подключением к базе данных, получать только экземпляр и тому подобное, поэтому я реализовал шаблон проектирования Singleton. Возможно, это неправильно, но вот почему я здесь.
Все работает отлично, все запросы выполняются хорошо, я в целом доволен, но время от времени (и это редкий случай, который я не могувоспроизводить охотно) я получаю исключение, которое вылетает мое приложение. Там написано
Фатальное исключение: java.lang.IllegalStateException. Невозможно выполнить эту операцию, потому что пул соединений был закрыт.
Выглядит очень просто, верно? Просто не закрывайте связь. Дело в том, что я не знаю. Я никогда не вызываю db.close () или что-то подобное. Когда мне нужен экземпляр базы данных, я вызываю этот метод:
public static synchronized DBHelper getInstance(Context ctx) {
if (mInstance == null) {
mInstance = new DBHelper(ctx.getApplicationContext());
}
return mInstance;
}
, который должен быть в порядке, теоретически. Я не понимаю, что я делаю неправильно, потому что я никогда не закрываю экземпляр. (должен?) Так что я подумал, что, может быть, есть какая-то сборка мусора, которая просто закрывает все, что считает утечкой, но я не уверен, что это так.
Я нигде не мог найти ничего такого особенного. Что я делаю не так?