2010-11-19 7 views
1

Ich bin ein wenig neu in Android-Entwicklung. Ich weiß, dass Netzwerkaktivität und teure Operationen nicht auf dem ui-Thread ausgeführt werden sollten, aber was ist mit der Datenbankaktivität?Frage über datàbase Aktivität in android onCreate() c

Ich habe eine Aktivität, die, wenn gestartet, ich eine SQLite-Datenbank abfragen und dynamisch Zeilen in einem Table-Layout mit einem Inflator füllen. Ich mache das alles in der oncreate() Methode. Sollte dies in einem separaten Thread geschehen? Wenn ja, kann mir jemand ein Beispiel geben?

Danke!

Antwort

1

Ich würde nicht erwarten, dass eine lokale Abfrage die Benutzeroberfläche wirklich sehr verlangsamen wird. Merken Sie, dass Sie beim ersten Start der App hängen bleiben? Dinge wie das Abrufen von URLs über das Netzwerk sollten in einem eigenen Thread sein, da sie lange Wartezeiten verursachen können.

+0

Nö, ich habe keine wirklichen Erfahrungen oder sehe keine Verzögerungen ... – littleK

+0

Ich würde mir darüber keine Sorgen machen. Der einzige Grund, warum Sie nicht etwas im UI-Thread tun, ist, dass es dazu führt, dass es aufhängt, und dass es weniger auf den Benutzer reagiert. – JOTN

+1

Lokale Datenbankabfragen können in der Tat lange genug dauern, um Ihre App zu verlangsamen und je nach Gerät potenziell nicht reagierende Anwendungen auszulösen. Sie kommen in vielen Fällen damit durch, aber das ist keine sichere Sache auf dem UIhread. – adamp

2

Je nach Datenbank und Gerät kann die Abfrage einer Datenbank im UI-Thread möglicherweise eine ANR-Nachricht auslösen.

Android bietet eine einfache Möglichkeit, asynchrone Abfragen auszuführen, sodass Sie den UI-Thread nicht blockieren, wenn dies länger dauert als erwartet. Schau dir die AsyncQueryHandler in den Dokumenten an und das IOSched hat eine Implementierung, die du stehlen und benutzen kannst.