Android, когда я должен открывать и закрывать соединения с базой данных?

Обзор:Открытие соединений с БД в onStart и асинхронных задачах стало довольно сложным. Является ли плохой практикой глобально доступные подключения к БД? Если это плохо, то как лучше?

Подробности:У меня есть приложение, которое подключается к базе данных sqlite3 в нескольких действиях. Сначала было не так много мест, где мне нужно было получить доступ к базе данных, поэтому я просто открывал и закрывал каждый раз, когда мне нужен доступ. Затем было больше мест, к которым нужно было получить доступ, поэтому, как было предложено в другом вопросе о переполнении стека, я начал открывать соединения с базой данных в методе onStart действия, которому требовалось соединение, и закрывать его в методе onStop.

Это работало нормально, пока мне не понадобились соединения в некоторых асинхронных задачах, которые пережили активность. Поскольку был вызван метод onStop для действия и соединения были закрыты, к моменту попытки асинхронной задачи получить доступ к базе данных произошел сбой. В качестве решения я создал отдельные соединения для каждой асинхронной задачи, которые открывались в методе onPreExecute и закрывались в методе onPostExecute.

Это привело к большому количеству открытий и закрытий подключений, и мне интересно, является ли хорошей идеей создание глобально доступных подключений к базе данных в контексте приложения. Это определенно очистит много кода и удалит любые незакрытые исключения БД, которые происходят, если я забуду закрыть соединение или приложение закроется принудительно. Кто-нибудь еще пробовал это/видел какие-либо проблемы с этим подходом?

5
задан odiggity 12 April 2012 в 18:26
поделиться