Jak jste navrhli, počet řádků je obrovský. Doporučuji nepoužívat AsyncTask
, protože to není vázáno na životní cyklus vaší aktivity, tj. pokud vaše aktivita, která ji zahájila, zemře, neznamená to AsyncTask
zemře také, takže pokud se pokusíte spustit AsyncTask a nějak, pokud vaše aktivita zmizí, např. otočení obrazovky nebo stisknutí klávesy Zpět, po restartu jiného AsyncTask
se vytvoří spíše než se spojí s již spouštěným AsyncTask
. tedy duplikování stejných operací.
Celkově bych tedy doporučil následující postup
(A)
-
Vytvořte
IntentService
, je tohandleIntent()
api se již spouští v pracovním vláknu, takže se nemusíte o nic starat, a jakmile jsou všechny zprávy ve frontě dokončeny, automaticky zemře, takže se nemusíte vůbec obávat úniku jakýchkoli prostředků. -
napište svou logiku pro hromadné vkládání řádků, použijte k tomu rozhraní content resolver bulkInsert() api. Doporučuji vložit 100 jiker na dávku, můžete implementovat rollback a kontroly chyb, abyste se ujistili, že vkládání probíhá normálně.
-
Po dokončení všech vkládání můžete odesílat příspěvky zpět do svého uživatelského rozhraní pomocí programu Handler a Messenger.
s tím vším dosáhnete dvou hlavních úkolů
- Nezavěšovat uživatelské rozhraní a uniknout tak případným chybám ANR
- I když je stisknuto tlačítko Zpět, je zajištěno, že operace db bude probíhat hladce, protože byla spuštěna v úloze na pozadí.