У вас есть пара случаев для рассмотрения:
1) Когда ваше приложение завершает работу (например, ввод onDestroy ()), убедитесь, что вы закрыли все курсоры, экземпляры базы данных SQLiteDatabase и SQLiteOpenHelpers (используя модель if (connection.isOpen ()) object.close ())
2) Когда приложение переходит в onPause () -> onResume () - используйте эти этапы соответствующим образом, чтобы приостановить / возобновить подключение или закрыть / открыть их.
Хорошей практикой является закрытие базы данных сразу после окончания работы с ней.База данных кэшируется, поэтому нет проблем с ее закрытием и повторным получением экземпляра, когда вам это нужно с помощью getWritableDatabase () / getReadableDatabase ()
Из официального документа: "После успешного открытия базы данныхкэшируется, поэтому вы можете вызывать этот метод каждый раз, когда вам нужно записать в базу данных. (Обязательно вызывайте close (), когда вам больше не нужна база данных.) "
Также имейте в видучто если SQLiteOpenHelper кэширует и отслеживает все открытые экземпляры SQLiteDatabase, это в основном означает, что если вы не оставите открытые соединения с базой данных, вам не придется вызывать close для SQLiteOpenHelper.
Я рекомендую закрыть все курсоры и базы данныхсразу после того, как вы перестанете с ними работать.Всегда старайтесь принудительно выполнять операции try / catch / for query и «блок finally» для вызова методов close для объектов.