2012-04-14 9 views
1

Ich habe eine Aktivität, die AsyncTask verwendet, um einige Daten in die Datenbank herunterzuladen und zu speichern. Um eine Datenbank zu öffnen, müssen wir Context-Parameter an die onCreate-Methode von SQLiteOpenHelper übergeben, was bedeutet, dass die Datenbank irgendwie Kontext benötigt.Arbeiten mit DatabaseHelper beim Wiederherstellen der Aktivität unter Android

Und ich bin nur neugierig, was passieren würde, wenn Gerät dreht und Aktivität durchläuft und Zyklus zu zerstören? Ist es in Ordnung, die Datenbank im Konstruktor der Aktivität und nicht in der onCreate() -Methode der Aktivität zu öffnen?

Das Problem ist, dass ich verwende DB von einem anderen Thread, und ich möchte wissen, was genau passieren würde, wenn die Aktivität und neu erstellt werden zerstört

+0

Sie müssen onDestroy() -Methode außer Kraft setzen und hier Ihre db Objekt schließen. –

+0

Aber wenn ich das tue, wird der Hintergrund-Thread, der heruntergeladene Daten in der Datenbank speichern sollte, abstürzen. Gibt es eine Möglichkeit, den Job zu beenden und dann db zu schließen? – renal

Antwort

1

Eine Lösung, die die Application anstelle dem Activity zu verwenden wäre. Sie benötigen nur eine statische Methode, die den ApplicationContext vom Anwendungskonstruktor anfordert.

Wenn Sie eine Art Singleton verwenden, um auf den Kontext zuzugreifen, haben Sie keine Probleme mit der Parallelität.

Siehe Beispiel hier: http://androidcookbook.com/Recipe.seam?recipeId=1218

Ein anderer Ansatz wäre es, die LoaderManager zu verwenden, die den Überblick über Ihre geöffneten Datenbankverbindungen halten.

Siehe hier: http://developer.android.com/reference/android/app/LoaderManager.html (Es gibt ein komplettes Beispiel zu)

Die LoaderManager im Kompatibilitätspaket verfügbar ist für bis zu Android 1.5

Michael

+0

Danke, Michael! Ich denke, das war es, wonach ich gesucht habe. Sorry, kann nicht stimmen – renal

+0

Ihre Begrüßung ;-) –

1

Incase möchten Sie einige db tun Vorgänge im Hintergrund. Sie sollten "Sevices" verwenden. Dienste können lange laufende Vorgänge im Hintergrund ausführen.

hier ist der Link: http://developer.android.com/guide/topics/fundamentals/services.html

+0

Danke für die Antwort! Die Dienste sind gut, aber mein Thread muss mit der Aktivität kommunizieren, wenn sie aktiv ist, also denke ich, dass AsyncTask besser passt – renal

Verwandte Themen