Zoals je hebt gesuggereerd, is het aantal rijen enorm. Ik raad aan om AsyncTask
niet te gebruiken , omdat het niet gebonden is aan uw activiteitslevenscyclus, d.w.z. als uw activiteit waarmee deze begon, sterft, betekent dit niet AsyncTask
sterft ook, dus als je probeert een AsyncTask te starten en op de een of andere manier als je activiteit sterft, bijvoorbeeld schermrotatie of terug-toets ingedrukt, bij het opnieuw opstarten van een andere AsyncTask
zal worden voortgebracht in plaats van dat het wordt gekoppeld aan het al uitvoeren van AsyncTask
. vandaar het dupliceren van dezelfde bewerkingen.
Dus al met al zou ik de volgende aanpak aanraden
(A)
-
Maak een
IntentService
, het ishandleIntent()
api wordt al uitgevoerd in een werkthread, dus u hoeft zich nergens zorgen over te maken, en zodra alle berichten in de wachtrij zijn voltooid, sterft het automatisch, dus u hoeft zich geen zorgen te maken over het lekken van bronnen. -
schrijf uw logica voor het in bulk invoegen van rijen, gebruik hiervoor de content resolver bulkInsert() api. Ik raad aan om 100 kuiten per batch in te voegen. U kunt terugdraai- en foutcontroles uitvoeren om ervoor te zorgen dat het invoegen normaal verloopt.
-
Zodra alle invoegingen zijn voltooid, kun je terug naar je gebruikersinterface posten met behulp van Handler en Messengers.
met dit alles bereik je twee grote uitdagingen
- U mag uw gebruikersinterface niet ophangen en zo aan een mogelijke ANR ontsnappen
- Zelfs als de back-toets wordt ingedrukt, zorgt u ervoor dat de db-bewerking soepel verloopt zoals deze werd uitgevoerd in de achtergrondtaak.