Som du har foreslået, er antallet af rækker enormt. Jeg vil anbefale ikke at bruge AsyncTask
, da det ikke er knyttet til din aktivitets livscyklus, dvs. hvis din aktivitet, der startede den dør, betyder det ikke AsyncTask
dør også, så hvis du forsøger at starte en AsyncTask og på en eller anden måde hvis din aktivitet dør, f.eks. skærmrotation eller tryk på tilbagetasten, når du genstarter en anden AsyncTask
vil blive affødt i stedet for at blive linket til allerede at udføre AsyncTask
. derfor duplikere de samme operationer.
Så alt i alt vil jeg anbefale at følge fremgangsmåden
(A)
-
Opret en
IntentService
, det erhandleIntent()
api køres allerede i en arbejdstråd, så du ikke behøver at bekymre dig om noget, og når alle beskeder i køen er færdige, dør den automatisk, så ingen bekymring overhovedet om at lække nogen ressourcer. -
skriv din logik for at indsætte rækker i bulk, brug content resolver bulkInsert() api til samme. Jeg vil anbefale at indsætte 100 rogn pr. batch, du kan implementere rollback og fejltjek for at sikre, at indsatsen går normalt.
-
Når alt indsættelse er færdigt, kan du sende tilbage til din brugergrænseflade ved hjælp af Handler og Messengers.
med alt dette vil du opnå to store udfordringer
- For ikke at afbryde din brugergrænseflade, undgå enhver mulig ANR
- Selv hvis tilbage-tasten trykkes ned, sikres det, at db-driften fortsætter problemfrit, da den blev taget op i baggrundsopgaven.