¿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.

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 .

  • ¿Cómo puedo leer mi base de datos de DDMS
  • Android SQLite Eliminar fila de la tabla Donde 2 Argumentos
  • Consulta de eliminación de Android
  • Cómo podemos eliminar la clave extranjera en sqlite?
  • OnCreate () no es llamado por getWritableDatabase ()
  • ¿La reinstalación de la aplicación suprime SQLiteDatabase o SharedPreferences?
  • Android - SimpleCursorAdapter.ViewBinder - Establecer el color de fondo
  • Problema con SQLiteOpenHelper en android 2.X y 3.X
  • Cómo utilizar la consulta para el argumento de selección múltiple utilizando una columna de selección
  • Cómo escribir contiene consulta en SQLite fts3 fulltext search
  • Android NullPointerException al ejecutar la consulta en la base de datos SQLite
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.