El mejor lugar para cerrar la conexión de la base de datos
Buscaba un rato para la respuesta en mi pregunta pero no conseguí lo que necesité. Tengo una aplicación con un ListView, y el formulario donde puedo agregar nuevo registro a la base de datos. Así que no hay muchas preguntas que hacer.
¿Cómo manejar las conexiones a db? ¿Debo cerrarlo después de obtener lo que quiero o debo mantener abierto todo el tiempo hasta que se cierre la aplicación? Quiero saber cuál es la mejor manera mientras que pienso en el rendimiento y la duración de la batería.
- Sqlite android extraer contactos con número de teléfono
- Android - ¿Dónde está la base de datos SQLite almacenada
- Base de datos H2 vs SQLite en Android
- Aplicación de diccionario androide con base de datos sin conexión
- SQLiteDiskIOException: error de E / S de disco (código 3850)
- ¿Cualesquiera buenas herramientas de ORM para el desarrollo de Android?
- Excepción de puntero nulo de SQLite de SQLite
- ActiveAndroid: columnas de fecha no creadas
- Sqlite plugin para Eclipse: depurar la base de datos sqlite en el dispositivo Android en vivo
- Mejor alternativa de la librería Android de SQLite?
- Cómo concat columnas en Android sqlite
- RawQuery: enlace o índice de columna fuera de rango
- ¿Cómo implementar una base de datos SQLite en Phonegap?
De acuerdo con este post de un ingeniero de Google , no hay nada malo con dejar abierta la conexión de base de datos:
Android tomó una decisión de diseño deliberada que puede parecer sorprendente, simplemente renunciar a la idea de que las aplicaciones salen de forma limpia y, en su lugar, dejar que el núcleo limpie sus recursos. Después de todo, el núcleo debe ser capaz de hacer esto de todos modos. Dado que el diseño, mantener cualquier cosa abierta durante toda la duración de la vida de un proceso y nunca cerrarla simplemente no es una fuga. Se limpiará cuando se limpie el proceso.
Por lo tanto, para simplificar, extendería la clase Application para proporcionar un solo punto de entrada bien definido para su código, y abriría la conexión de base de datos en su onCreate()
. Guarde la conexión de DB como un campo en su aplicación y proporcione un método de acceso para que la conexión esté disponible para el resto de su código.
Entonces, no se preocupe por cerrarlo.
Establecer la conexión a la base de datos es caro. Si las conexiones no son escasas y la base de datos es local, mantendría abierta la conexión en lugar de establecerla para cada operación de escritura en la base de datos, como lo haría típicamente en una aplicación cliente-servidor que necesita escalar a Un gran número de usuarios simultáneos.
En general, cerraría la conexión en la función onDestroy () de la actividad que abrió la conexión. Cierro () un cursor de una base de datos en la función que utiliza el cursor.
public MyActivity extends Activity{ private myDatabase mDatabase; // myDatabase extends SQLiteOpenHelper private Cursor mCursor; public MyActivity(Context context){ super(context); initMemberVariables(); } public ElementButton(Context context, AttributeSet attrS){ super(context, attrS); initMemberVariables(); } public ElementButton(Context context, AttributeSet attrS, int defStyle){ super(context, attrS, defStyle); initMemberVariables(); } private void initMemberVariables(){ mDatabase = new PSEdb(this.getContext()); } private void getData(){ mCursor = mDatabase.MyGetterFunction(); while(mCursor.moveToNext()){ try{ // populate your data }catch(CursorIndexOutOfBoundsException ex){ // handle the exception } } mCursor.close(); } @Override public void onDestroy(){ super.onDestroy(); mDatabase.close(); } }
- Tema que no se aplica a DialogFragment en Android
- Agregar los servicios de Google Play al proyecto Eclipse