Si no cierra las conexiones de la base de datos, causarán pérdidas de memoria con el tiempo.
El ejemplo del Bloc de notas utiliza startManagingCursor
, pero aún necesita cerrar explícitamente la conexión db. Ejecute el ejemplo del Bloc de notas tal como está y edite varias notas en sucesión; verá que comienza a lanzar Advertencias y errores en LogCat. (En las aplicaciones más grandes, también comenzará a ver las advertencias de memoria detección de fugas.)
W/SQLiteCompiledSql( 302): Releasing statement in a finalizer. Please ensure that you explicitly call close() on your cursor: INSERT INTO notes(body, title) VALUES(?, ?);
W/SQLiteCompiledSql( 302): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
W/SQLiteCompiledSql( 302): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:62)
...
W/SQLiteCompiledSql( 302): at dalvik.system.NativeStart.main(Native Method)
E/Database( 302): close() was never explicitly called on database '/data/data/com.android.demo.notepad3/databases/data'
E/Database( 302): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
E/Database( 302): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1810)
...
E/Database( 302): at dalvik.system.NativeStart.main(Native Method)
Usted ha mencionado que el cierre en onDestroy()
"deja vulnerabilidades" en ningún hilos no interfaz de usuario que todavía se están ejecutando. Si está utilizando AsyncTask, puede verificar el estado de estos hilos usando getStatus
en sus tareas.
if (myAsyncTask.getStatus() == AsyncTask.Status.FINISHED){
mDbHelper.close();
}
continuación, cierre la conexión en el método de su AsyncTask
onPostExecute
.
Espero que ayude ...
¿mi respuesta se acepta y no se acepta? – Farray
Estaba intentando aceptarlo en mi teléfono ... Supongo que este sitio tiene errores en el navegador de Android. – Tenfour04