sql >> Databasteknik >  >> RDS >> SQLite

Hur man infogar stora mängder data i sqlite-databasen i Android

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)

  1. Skapa en IntentService , det är handleIntent() 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.

  2. 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.

  3. 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

  1. För att inte lägga på gränssnittet, undvika eventuell ANR
  2. Även om tillbaka-tangenten trycks ned, säkerställs att db-operationen fortsätter smidigt eftersom den togs upp i bakgrundsuppgiften.


  1. SQL Server - Fråga kortslutning?

  2. Skäl till att inte ha ett klustrat index i SQL Server 2005

  3. MySQL fel 1064 syntax men allt verkar bra

  4. En guide för att distribuera TimescaleDB med Docker