2017-08-25 5 views
2

Je lis beaucoup de messages qui racontent de longues opérations (comme la lecture de DB) ne devraient pas être excutés sur le thread principal.Dois-je exécuter Insert, Delete, Update sur ma propre base de données SQLite à l'intérieur de AsyncTaskLoader

Jusqu'ici, j'ai utilisé CursorLoader (pour "lire" ContentResolver) et AsynkTaskLoader (pour "lire" ma propre base de données SQLite).

Je sais d'effectuer Insert, Delete et Update "sur" ContentResolver je peux utiliser AsyncQueryHandler.

Ma question est: quelle est la meilleure façon d'exécuter Insert, Delete et Update sur mon propre SQLite db ??

Dois-je simplement exécuter ces opérations à l'intérieur de la méthode loadInBackground() de AsyncTaskLoader?

Merci

+1

Utiliser 'AsyncTask' et exécuter des mises à jour dans la méthode' doInBackground'. Mais, si vos mises à jour sont rapides et rapides, vous pouvez les exécuter librement dans le fil de l'interface utilisateur et vous rendre la vie un peu plus facile. – Dusan

+1

Merci l'homme :) – MDP

+1

Même les appareils lents sont capables d'effectuer quelques centaines d'opérations db simples par seconde, il n'y a donc aucun intérêt à effectuer une ou plusieurs opérations en arrière-plan. https://stackoverflow.com/questions/28188164/android-sqlite-performance – Dusan

Répondre

1

Si vos requêtes sont simples et il ne fera pas beaucoup de temps pour exécuter alors simplement vous pouvez l'utiliser dans thread principal lui-même.

Si vous gérez des données volumineuses, vous avez deux options.

  1. AsyncTask:

Si vous souhaitez mettre à jour votre interface utilisateur après une opération, vous pouvez utiliser AsyncTask pour faire le processus dans un thread d'arrière-plan et passer le résultat dans le thread principal. Pour plus d'informations sur AsyncTaksk cliquez sur here.

2. Discussion

S'il n'y a pas de but de mettre à jour l'interface utilisateur après l'opération, vous pouvez simplement utiliser Discussion pour le faire.

+0

Merci monsieur. Qu'est-ce qui est évalué comme un "processus de big data" pour un mobile? sauvegarder/supprimer/mettre à jour 100 enregistrements? 1.000? 1000.000? – MDP

+1

Je n'utiliserai pas le thread principal si j'ai besoin d'interroger plus de 20 enregistrements. –

+1

Je ne connais pas les chiffres exacts. Mais ce n'est pas une question de chiffres, c'est une question de temps d'exécution. –

1

Vous pouvez utiliser un thread de gestionnaire d'arrière-plan à cette fin.

private Handler mHandler = null; // global variable 
private HandlerThread mHandlerThread = null; // global variable 

// Créer une instance à l'intérieur onCreate() ou un autre lieu à l'intérieur de votre code afin qu'il serait appelé son. Aussi, vous pouvez le faire singleton si nécessaire, mais ce n'est pas la bonne façon.

mHandlerThread = new HandlerThread("HandlerThread"); 
    mHandlerThread.start(); 
    mHandler = new Handler(mHandlerThread.getLooper()); 

// effectuer une opération de fond comme:

handler.postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         // Do background work here. 

        } 
       }, 2000); 
+0

Merci l'homme :) – MDP