Quand dois-je effectuer certaines opérations SQLite sur un autre thread (pas le thread principal)?

Mon application Android inclut une base de données SQLite avec une classe SQLiteOpenHelper pour la gérer. Pendant l'utilisation de la demande, l'utilisateur peut effectuer certaines opérations telles que l'ajout / suppression / mise à jour, etc. sur la base de données.

À certains points, la taille de l'opération sera connue, comme ceci:

  • Android Singleton avec contexte global
  • Comment activer le support multi-utilisateur dans AVD 4.2
  • Android Comment puis-je imiter le comportement de @android: id / empty dans un GridView?
  • La mise en œuvre des autorisations de Marshmallow
  • HelloAndroid] emulator-5554 déconnecté! Annuler 'com.example.helloandroid.HelloAndroid activity launch'!
  • 101 façons d'effacer un cache WebView - qui ne fonctionnent pas
    1. Bouton des clics utilisateur pour sauvegarder l'élément
    2. SQLiteDatabase effectue une seule requête d' insert
    3. L'utilisateur continue d'utiliser l'application

    Dans d'autres domaines de l'application, l'opération peut être grande, comme l'insertion de plus de 10 éléments dans la base de données en même temps.

    Des questions:

    • Dois-je filer des opérations simples comme l'insertion / la mise à jour / la suppression / la visualisation d'un élément?
    • Faudra-t-il plus longtemps pour insérer 1 élément dans une table qui contient de nombreux éléments (comme 30+) qu'il faudrait pour insérer dans une table sans éléments?
    • Si je n'ai pas besoin de filer des opérations aussi simples, à quel point suggérez-vous de commencer à les enfiler?

    Quand je dis le fil, je veux dire utiliser un thread qui n'est pas le thread UI principal.

    Edit: Je me rends compte que les petites opérations ne prennent pas beaucoup de temps et je pourrais très bien m'enfuir en les faisant sur le fil principal. Je crains simplement que ce serait une mauvaise pratique de les exécuter sur le fil principal et souhaiterait des éclaircissements!

  • Existe-t-il un code pour Snackbars dans Android L ou est-ce qu'on s'attend à ce que nous les mettions en œuvre?
  • Mise à jour étrangeLe comportement ViewLayout
  • Dupliquer les fichiers pendant l'emballage de APK app-debug-unaligned.apk
  • "ComputeValuesWithHarfbuzz - doit forcer à exécuter une seule fois" dans Android 4: qu'est-ce que cela signifie?
  • Réalités de l'utilisation de QT C ++ pour écrire une application de téléphonie multiplate-forme
  • Projet de bibliothèque Android - Définition des cours
  • 3 Solutions collect form web for “Quand dois-je effectuer certaines opérations SQLite sur un autre thread (pas le thread principal)?”

    Règle générale pour tout: si c'est assez rapide, faites-le sur le fil principal. Sinon, utilisez un thread de travail.

    À moins d'avoir une base de données ridiculement énorme, une seule opération ne garantit presque jamais un fil distinct. Les bases de données en général sont conçues pour bien s'ajuster, mais bien sûr, une très grande base de données (10 000 lignes) sera un peu plus lente que la petite. 30 lignes, cependant, n'est rien.

    Je commencerais à rajouter des choses si vous avez beaucoup d'opérations, comme un tas de requêtes, ou des requêtes compliquées qui couvrent plusieurs tables.

    Comme pour tout – profil de votre application, et si c'est trop lent, optimisez. N'écrivez pas un générateur de base de données synchronisé super-duper multi-core, si aucune de vos requêtes ne prend plus de 2 ms.

    Toujours mesurer avant d'optimiser!

    Assurez-vous que les opérations de DB que vous affectez l'expérience de l'utilisateur et que vous recherchez une solution.

    Si les éléments de la base de données sont lents, utilisez AsyncTask , qui a été conçu pour effectuer des tâches en arrière-plan, puis mettez à jour l'interface graphique sur EDT.

    Il n'y a absolument pas de raison d'utiliser un fil ici. Il suffit de retourner le curseur, d'extraire les informations du curseur et de le retourner à l'activité principale.

    Plus précisément, un fil est quelque chose d'idéal qui va se répéter jusqu'à ce que quelque chose se passe ou qu'il dépasse. Étant donné que la base de données que vous utilisez, je suppose que le téléphone prend un temps pratiquement nul pour y accéder.

    Vous pouvez également créer une classe Utility pour aider votre activité à l'interaction de base de données. Ce serait ce que votre activité appelle pour interagir avec la base de données. Plus précisément, le flux de contrôle serait comme ceci:

    Activité -> Utilitaire -> Base de données

    Il est entre l'activité et la base de données afin de les garder isolés les uns des autres et de faciliter l'accès à tout ce dont il a besoin car il n'est pas nécessaire d'accéder directement à la base de données.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.