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)
-
Erstellen Sie einen
IntentService
, es isthandleIntent()
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. -
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.
-
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
- Ihr UI nicht aufzuhängen, um möglichen ANRs zu entgehen
- Auch wenn die Zurück-Taste gedrückt wird, wird sichergestellt, dass der db-Betrieb reibungslos weitergeht, da er im Hintergrundtask aufgenommen wurde.