Der Zugriff auf eine Datenbank in einem separaten Thread in Android
-
28-09-2019 - |
Frage
Wie greifen Sie auf eine SQLiteDatabase
Datenbank in einem separaten Thread (dh: ein AsyncTask
) ein Activity
und stellen Sie sicher, dass Sie lassen Sie es immer in einem Rechtsstaat
Wenn ich richtig verstehe, kann der Faden jederzeit getötet werden und die Datenbank kann offen bleiben, möglicherweise einen IllegalStateException
Beschränkung ( SQLiteDatabase
erstellt und nie geschlossen ) zu einem späteren Zeitpunkt.
Wie Sie damit umgehen?
Lösung
Wenn Ihr AsyncTask
von Ihrem Activity
verwaltet wird, dann Activity
AsyncTask
in der richtigen Zeit kündigen kann (wenn es anfällig wird von O getötet zu werden, zB nach Activity.onPause()
) so AsyncTask.onCancelled()
aufgerufen wird, in dem Sie die DB schließen können.
Wenn Ihr AsyncTask
(oder ein Thread
) nicht dann von Ihrem Activity
verwaltet Ihr in Schwierigkeiten sind und in Betracht ziehen sollten Ihre Architektur neu zu gestalten.
Andere Tipps
Zwei Möglichkeiten:
-
Sie können eine
Runtime.addShutdownHook(..)
und schließen Datenbank registrieren es. -
benutzerdefinierte
Application
Erstellen undonLowMemory()
implementieren, wo Sie die Datenbank schließen.