Mon application utilise un Service
pour créer des éléments d’arrière-plan. J’utilise des threads supplémentaires dans le service pour effectuer des calculs. Pour ce faire, je crée deux threads toutes les 5 à 10 secondes, qui s’exécutent entre 5 et 10 secondes. Mais je ne sais pas quel modèle de fil je devrais utiliser:
AsyncTask:
Avantages:
Les inconvénients:
ExecutorService
avec un pool de threads fixe pour exécuter les tâches Async. Fils Java normaux:
Avantages:
Les inconvénients:
Quel modèle est préférable d’utiliser? Surtout par souci de performance. Existe-t-il une lourde charge lorsque j’utilise AsyncTasks et ExecutorService est-il plus rapide à réutiliser les threads qu’Android lors de la création de nouvelles AsyncTasks?
Si vous regardez l’implémentation d’ AsyncTask
, vous verrez qu’il utilise son propre pool de threads à l’aide de “threads Java normaux”.
Existe-t-il une lourde charge lorsque j’utilise AsyncTasks et ExecutorService est-il plus rapide à réutiliser les threads qu’Android lors de la création de nouvelles AsyncTasks?
Il ne devrait y avoir aucune différence substantielle entre les deux.
J’utilise Needle; une bibliothèque multithreading open source, simple et puissante pour Android. Avec cela, vous pouvez dire des choses comme:
Needle.onMainThread().execute(new Runnable() { @Override public void run() { // eg change one of the views } });
ou
Needle.onBackgroundThread().execute(new UiRelatedTask() { @Override protected Integer doWork() { int result = 1+2; return result; } @Override protected void thenDoUiRelatedWork(Integer result) { mSomeTextView.setText("result: " + result); } });
Avantages
Les inconvénients
Découvrez le sur GitHub: https://github.com/ZsoltSafrany/needle