Acceso a una base de datos en un hilo separado en Android
-
28-09-2019 - |
Pregunta
¿Cómo se accede a una base de datos SQLiteDatabase
en un hilo separado (es decir: un AsyncTask
) de un Activity
y asegúrese de que siempre se deja en un estado legal
Si entiendo correctamente, el hilo se puede matar en cualquier momento y la base de datos podría permanecer abierta, lo que podría dar una IllegalStateException
( SQLiteDatabase
creado y nunca cerrado ) a una última vez.
¿Cómo lidiar con esto?
Solución
Si su AsyncTask
es administrado por su Activity
, entonces Activity
puede cancelar AsyncTask
en el momento adecuado (cuando se convierte en vulnerables a ser matado por el sistema operativo, por ejemplo, después Activity.onPause()
) por lo AsyncTask.onCancelled()
será llamado en el que puede cerrar la base de datos.
Si su AsyncTask
(o una Thread
) no es administrado por su Activity
entonces su están en problemas y debe considerar el rediseño de su arquitectura.
Otros consejos
Dos maneras:
-
Puede registrar un
Runtime.addShutdownHook(..)
y cerca de la base de datos existe. -
Crea
Application
personalizada e implementaronLowMemory()
donde se cierra la base de datos.