Accesso a un database in un thread separato in Android
-
28-09-2019 - |
Domanda
Come si accede a un database di SQLiteDatabase
in un thread separato (cioè: un AsyncTask
) di un Activity
e assicurarsi che si lascia sempre in uno stato di diritto
Se ho capito bene, il filo può essere ucciso in qualsiasi momento e il database potrebbe rimanere aperta, potenzialmente dando una IllegalStateException
( SQLiteDatabase
creato e mai chiuso ) in un secondo momento.
Come si fa a trattare con questo?
Soluzione
Se il AsyncTask
è gestito dal vostro Activity
, allora Activity
può annullare AsyncTask
nei tempi previsti (quando diventa vulnerabile ad essere ucciso da sistema operativo, ad esempio dopo Activity.onPause()
) in modo AsyncTask.onCancelled()
sarà chiamato in cui è possibile chiudere il DB.
Se il AsyncTask
(o un Thread
) non è gestita dal vostro Activity
allora il vostro sono in difficoltà e dovrebbe prendere in considerazione riprogettare l'architettura.
Altri suggerimenti
Due modi:
-
È possibile registrare un
Runtime.addShutdownHook(..)
e vicino database di lì. -
Crea
Application
personalizzato e implementareonLowMemory()
in cui si chiude il database.