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?

Était-ce utile?

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:

  1. Vous pouvez enregistrer une base de données et Runtime.addShutdownHook(..) près il.

  2. Créer un Application personnalisé et mettre en œuvre onLowMemory() où vous fermez la base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top