2010-10-14 2 views
0
  1. Est-ce une bonne solution ou pas?Comment utiliser l'outil Executor d'AsyncTask ou IntentService pour la tâche de mise en file d'attente sur Android?

  2. Comment mettre en œuvre?

  3. Quand dois-je arrêter correctement? Je l'ai fermé onDestroy() dans l'activité, puis relancer mon application dès que possible. Il provoque un java.util.concurrent.RejectedExecutionException, pourquoi? Est-ce que quelqu'un connaît son cycle de vie?

Une idée? Merci.

+0

Après avoir changé pour créer l'Exécuteur dans onCreate que statique, l'exécution est parti. – shiami

Répondre

0

  1. Oui, je le pense. AsyncTask est utilisé pour les tâches qui mettront à jour l'interface utilisateur. Désolé, je ne suis pas familier avec IntentService.
  2. Créez un objet Application qui implémente l'interface android.app.Application. Créez un Executor dans la méthode onCreate. Vous pouvez obtenir votre objet Application en utilisant l'instruction suivante:

    MyApplication app = (MyApplication) context.getApplicationContext();

  3. Je ne suis pas sûr de ce que vous entendez par "app destory". Je pense que vous pouvez arrêter Executor dans la méthode onTerminate de l'application et la méthode onLowMemory.

+0

Désolé pour ma faute de frappe, je veux dire onDestroy() dans l'activité. Je n'ai aucune idée de la raison pour laquelle je ferme l'application (éteindre l'exécuteur) et relancer l'application à nouveau, il s'est écrasé par l'exception RejectedExecutionException. Il semble exécuter la tâche quand il n'est pas complètement arrêté et utiliser à nouveau l'ancien exécuteur. Pourquoi? – shiami

+1

Peut-être que vous pouvez publier un peu de votre code, afin que nous puissions en savoir plus sur votre question. BTW, je pense qu'il est préférable de créer et d'éteindre Executor dans l'objet Application (comme je l'ai dit dans ma réponse à votre deuxième question), car Executor est un objet lourd, et l'utilisateur peut lancer et quitter Activity très fréquemment, mais l'objet Application sera là sauf si le processus de l'application est tué. Et si Executor est créé dans Activity, il est difficile de réutiliser l'Executor en dehors de cette Activity. – Tony

+0

Merci pour le conseil. Je pense que c'est pourquoi il ne peut pas utiliser dans le cycle de vie de l'activité. – shiami

2

Je viens de calculer le AsyncYask déjà mis en œuvre l'exécuteur de Java concurrency avec core_pool_size 5 et max_pool_size 128. C'est génial!

Questions connexes