Descripción general: la apertura de conexiones de db en onStart y en tareas asíncronas ha llegado a ser bastante compleja. ¿Es una mala práctica tener conexiones db disponibles en todo el mundo? Si es malo, ¿cuál es la mejor manera?Android ¿cuándo debería abrir y cerrar conexiones de db?
Detalles: Tengo una aplicación que se conecta a la base de datos sqlite3 en varias actividades. Al principio no había muchos lugares donde necesitaba acceder a la base de datos, así que solo abría y cerraba cada vez que necesitaba acceso. Luego había más lugares que necesitaban acceder a él, así que, como se sugirió en otra pregunta sobre el desbordamiento de pila, comencé a abrir las conexiones de la base de datos en el método onStart de la actividad que necesitaba una conexión y la cerré en el método onStop.
Esto funcionó bien hasta que comencé a necesitar conexiones en algunas tareas asincrónicas que sobrevivieron a la actividad. Como el método onStop para la actividad se había llamado y las conexiones se habían cerrado, para cuando la tarea asincrónica intentó acceder a la base de datos estaba fallando. Como solución, creé conexiones separadas para cada tarea asíncrona que se abrieron en el método onPreExecute y cerré en el método onPostExecute.
Esto ha dado lugar a una gran cantidad de apertura y cierre de conexiones, y me pregunto si la creación de conexiones de db disponibles en todo el mundo en el contexto de la aplicación es una buena idea. Definitivamente limpiaría una gran cantidad de código y eliminaría cualquier excepción de db no cerrada que esté sucediendo si olvido cerrar una conexión o si la aplicación experimenta un cierre forzado. ¿Alguien más ha intentado esto/ve algún problema con este enfoque?
Esta es una buena práctica, hazlo. El problema principal que debe evitarse es la pérdida de memoria al utilizar el contexto de la aplicación, lo que no debería ser un problema si solo es para las operaciones de la base de datos. – stealthcopter