SQLite
 sql >> Datenbank >  >> RDS >> SQLite

So fügen Sie große Datenmengen in eine SQLite-Datenbank in Android ein

Wie Sie vorgeschlagen haben, ist die Anzahl der Zeilen riesig. Ich empfehle, AsyncTask nicht zu verwenden , da es nicht an Ihren Aktivitätslebenszyklus gebunden ist, d. h. wenn Ihre Aktivität, die es gestartet hat, stirbt, bedeutet dies nicht AsyncTask stirbt ebenfalls, also wenn Sie versuchen, eine AsyncTask zu initiieren und wenn Ihre Aktivität irgendwie stirbt, z. B. Bildschirmdrehung oder gedrückte Zurück-Taste, beim Neustart einer anderen AsyncTask wird erzeugt, anstatt mit der bereits ausgeführten AsyncTask verknüpft zu werden . daher werden dieselben Operationen dupliziert.

Alles in allem würde ich also folgenden Ansatz empfehlen

(A)

  1. Erstellen Sie einen IntentService , es ist handleIntent() api wird bereits in einem Worker-Thread ausgeführt, sodass Sie sich um nichts kümmern müssen, und sobald alle Nachrichten in seiner Warteschlange fertig sind, stirbt es automatisch, also keine Sorge, dass Ressourcen verloren gehen.

  2. Schreiben Sie Ihre Logik zum Einfügen von Zeilen in großen Mengen, verwenden Sie den Inhaltsauflöser bulkInsert () api für denselben. Ich empfehle das Einfügen von 100 Roes pro Stapel, Sie können Rollback- und Fehlerprüfungen implementieren, um sicherzustellen, dass das Einfügen normal verläuft.

  3. Sobald alle Einfügungen abgeschlossen sind, können Sie mit Handler und Messengers an Ihre Benutzeroberfläche zurücksenden.

Mit all dem werden Sie zwei große Herausforderungen meistern

  1. Ihr UI nicht aufzuhängen, um möglichen ANRs zu entgehen
  2. Auch wenn die Zurück-Taste gedrückt wird, wird sichergestellt, dass der db-Betrieb reibungslos weitergeht, da er im Hintergrundtask aufgenommen wurde.