¿Es esencial cerrar la base de datos?

En el ejemplo del Bloc de notas de Google, no parecen cerrar la base de datos, al menos no en onDestroy ().

¿Cuál es el propósito de cerrarlo, y realmente lo necesito? ¿Una base de datos abierta ocupa una memoria importante? He descubierto que cerrarlo en onDestroy deja vulnerabilidades si hay algún subproceso en ejecución que intente acceder a él después de finalizar la Actividad.

2 Solutions collect form web for “¿Es esencial cerrar la base de datos?”

Si no cierra las conexiones de la base de datos, causarán pérdidas de memoria en el tiempo.

El ejemplo del Bloc de notas utiliza startManagingCursor , pero todavía necesita cerrar explícitamente la conexión db. Ejecute el ejemplo del Bloc de notas como está y edite varias notas sucesivamente, verá que comienza a lanzar advertencias y errores en LogCat. (En aplicaciones más grandes, también comenzará a ver advertencias de detección de fugas de memoria).

 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 mencionó que cerrarlo en onDestroy() "deja vulnerabilidades" en cualquier subproceso que no esté en la interfaz de usuario. Si está utilizando AsyncTask, puede comprobar el estado de estos subprocesos utilizando getStatus en sus tareas.

 if ( myAsyncTask.getStatus() == AsyncTask.Status.FINISHED ){ mDbHelper.close(); } 

A continuación, cierre la conexión en el método onPostExecute de su AsyncTask .

Espero que ayude…

Debes cerrarlo.

El ejemplo del bloc de notas debe estar utilizando el arranque de StartManagingCursor de la actividad .

  • Mejor manera de acceder a la base de datos en la aplicación multi-threaded Android?
  • Registro de consultas SQL en android
  • La aplicación se bloquea al actualizar la base de datos sqlite por primera vez
  • Recyclerview + Proveedor de contenido + CursorLoader
  • Identificar el tipo de datos de una columna en un Cursor Android de SQLite
  • Cómo almacenar datos en la base de datos sqlite con jQuery-mobile dreamviewer cc con phonegap en android?
  • SQLite Transformar columnas en cadena delimitada por comas
  • ¿Cómo portar un MS Access existente a SQLite para su uso con el desarrollo de aplicaciones para Android?
  • No se puede eliminar la columna de la tabla sqlite
  • Problema con SQLiteOpenHelper en android 2.X y 3.X
  • El error del cursor en Android me dice que la columna no existe
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.