Accès à une base de données dans un fil séparé dans les applications
-
28-09-2019 - |
Question
Comment avez-vous accès une base de données SQLiteDatabase
dans un thread séparé (ex: un AsyncTask
) d'un Activity
et assurez-vous que vous laissez toujours dans un état juridique
Si je comprends bien, le fil peut être tué à tout moment et la base de données peut rester ouverte, ce qui pourrait donner un IllegalStateException
( SQLiteDatabase
créé et jamais fermé ) à une dernière fois.
Comment gérez-vous cela?
La solution
Si votre AsyncTask
est géré par votre Activity
, puis Activity
peut annuler AsyncTask
en temps utile (quand il devient vulnérable à être tué par OS, par exemple après Activity.onPause()
) si AsyncTask.onCancelled()
sera appelée où vous pouvez fermer la DB.
Si votre AsyncTask
(ou un Thread
) ne sont pas gérés par votre Activity
alors vous êtes en difficulté et devraient envisager la refonte de votre architecture.
Autres conseils
Deux façons:
-
Vous pouvez enregistrer une base de données et
Runtime.addShutdownHook(..)
près il. -
Créer un
Application
personnalisé et mettre en œuvreonLowMemory()
où vous fermez la base de données.