Como você sugeriu, o número de linhas é enorme, recomendo não usar
AsyncTask
, pois não está vinculado ao seu ciclo de vida da atividade, ou seja, se a atividade que a iniciou morrer, isso não significa AsyncTask
morre também, então se você tentar iniciar um AsyncTask e de alguma forma se sua atividade morrer, por exemplo, rotação de tela ou tecla de volta pressionada, ao reiniciar outro AsyncTask
será gerado em vez de ser vinculado ao AsyncTask
já em execução . portanto, duplicando as mesmas operações. Então, apesar de tudo, eu recomendaria seguir a abordagem
(UMA)
-
Crie umIntentService
, éhandleIntent()
api já é executado em um thread de trabalho para que você não precise se preocupar com nada, e quando todas as mensagens em sua fila são concluídas, ele morre automaticamente, portanto, não se preocupe com o vazamento de recursos.
-
escreva sua lógica para inserir linhas em massa, use o resolvedor de conteúdo bulkInsert() api para o mesmo. Eu recomendarei a inserção de 100 roes por lote, você pode implementar verificações de rollback e erro para garantir que a inserção ocorra normalmente.
-
Depois que todas as inserções estiverem concluídas, você poderá postar de volta na interface do usuário usando o Handler e os Messengers.
com tudo isso você alcançará dois grandes desafios
- Para não desligar sua interface do usuário, escapando de qualquer ANR possível
- Mesmo se a tecla Voltar for pressionada, garantimos que a operação do banco de dados continue sem problemas, pois foi realizada na tarefa em segundo plano.