Делаю приложение которое в многопоточном режиме обращается к базе, следовательно каждый раз открывать/закрывать соединения с БД не представляется возможным, поэтому я использую "имитацию" singleton
Код: Выделить всё
public class HelperFactory {
private static DatabaseHelper databaseHelper;
public static DatabaseHelper getDbHelper() {
return databaseHelper;
}
public static void setDbHelper(Context context) {
databaseHelper = OpenHelperManager.getHelper(context,
DatabaseHelper.class);
}
public static void releaseHelper() {
if (databaseHelper != null) {
OpenHelperManager.releaseHelper();
databaseHelper = null;
}
}
}
С таким подходом все хорошо работает, база не лочится, ничего не падает, однако спустя недели разработки, меня окатило холодным потом, когда я понял что метод releaseHelper() я нигде не использую, а следовательно, для объекта SQLiteOpenHelper никогда не вызывается close()
На сайте ormlite рекомендуют закрывать соединение в onDestroy методе Activity, но это скорее вариант для приложения в котором всего одно Activity, у меня же их несколько, и во время уничтожения одного, вполне может происходить запись в базу в фоновом потоке.
Кто-то предлагает создавать подключение в onCreate() методе класса Application, и закрывать в onTerminate(), однако на девайсах последний метод никогда не вызывается.
Собственно вопрос: В какой момент необходимо закрывать соединение с базой? Можно ли его оставить открытым, на совесть самого Android?
Или может быть существуют другие способы получения доступа к базе в любой момент из любой точки приложения (не обязательно с использованием ORMLite)?
Спасибо, что дочитали до конца.
