Som du har föreslagit är antalet rader enormt. Jag rekommenderar att du inte använder AsyncTask
, eftersom det inte är kopplat till din aktivitetslivscykel, dvs om din aktivitet som startade den dör, betyder det inte AsyncTask
dör också, så om du försöker starta en AsyncTask och på något sätt om din aktivitet dör, t.ex. skärmrotation eller nedtryckt bakåtknapp, när du startar om en annan AsyncTask
kommer att skapas snarare än att den länkas till redan exekverande AsyncTask
. duplicerar därför samma operationer.
Så sammantaget skulle jag rekommendera att följa tillvägagångssätt
(A)
-
Skapa en
IntentService
, det ärhandleIntent()
api körs redan i en arbetstråd så du behöver inte oroa dig för någonting, och när alla meddelanden i dess kö är klara dör det automatiskt, så du behöver inte oroa dig för att läcka några resurser. -
skriv din logik för att infoga rader i bulk, använd content resolver bulkInsert() api för samma. Jag rekommenderar att du lägger in 100 löjrom per omgång, du kan implementera återställning och felkontroller för att säkerställa att insättningen går normalt.
-
När all infogning är klar kan du skicka tillbaka till ditt användargränssnitt med Handler och Messengers.
med allt detta kommer du att uppnå två stora utmaningar
- För att inte lägga på gränssnittet, undvika eventuell ANR
- Även om tillbaka-tangenten trycks ned, säkerställs att db-operationen fortsätter smidigt eftersom den togs upp i bakgrundsuppgiften.