SQLite
 sql >> Base de données >  >> RDS >> SQLite

Comment insérer une grande quantité de données dans la base de données sqlite sous Android

Comme vous l'avez suggéré, le nombre de lignes est énorme, je recommanderai de ne pas utiliser AsyncTask , car il n'est pas lié au cycle de vie de votre activité, c'est-à-dire que si votre activité qui l'a démarrée meurt, cela ne signifie pas AsyncTask meurt également, donc si vous essayez de lancer une AsyncTask et d'une manière ou d'une autre si votre activité meurt, par exemple la rotation de l'écran ou la touche de retour enfoncée, lors du redémarrage d'une autre AsyncTask sera généré plutôt qu'il ne soit lié à l'exécution déjà en cours de AsyncTask . d'où la duplication des mêmes opérations.

Donc, dans l'ensemble, je recommanderais l'approche suivante

(A)

  1. Créer un IntentService , c'est handleIntent() api s'exécute déjà dans un thread de travail afin que vous n'ayez à vous soucier de rien, et une fois que tous les messages de sa file d'attente sont terminés, il meurt automatiquement, donc ne vous inquiétez pas du tout de la fuite de ressources.

  2. écrivez votre logique pour insérer des lignes en masse, utilisez l'api de résolution de contenu bulkInsert() pour la même chose. Je recommanderai d'insérer 100 roes par lot, vous pouvez implémenter des contrôles d'annulation et d'erreur pour vous assurer que l'insertion se déroule normalement.

  3. Une fois toutes les insertions terminées, vous pouvez publier sur votre interface utilisateur à l'aide de Handler et Messengers.

avec tout cela vous réussirez deux défis majeurs

  1. Pour ne pas raccrocher votre interface utilisateur, échapper à tout éventuel ANR
  2. Même si la touche de retour est enfoncée, garantit que l'opération db se déroule sans problème car elle a été reprise dans la tâche en arrière-plan.