2011-03-10 3 views
2

En ce qui concerne les widgets, pouvons-nous appeler une tâche asynchrone depuis un service?Widget Android: Service vs tâche asynchrone

J'ai actuellement une petite application qui recherche les scores de sport en direct et affiche la même chose. La classe principale appelle une tâche asynchrone. La tâche asynchrone appelle 2 procédures. Le premier à analyser un fichier XML et obtenir un lien HTML. Le second à lire ce fichier html. Maintenant, je veux convertir cette application en un widget d'écran d'accueil. Puis-je appeler ma tâche asynchrone à partir du service? Des pointeurs vers des exemples?

Aidez-nous s'il vous plaît.

Cordialement, Sam

+0

Mec accepter la réponse pour améliorer votre note ... – JPM

Répondre

0

Si l'activité d'origine et le service sont dans le même paquet, ou on est appropriée en fonction de l'autre, vous pouvez appeler la même tâche async sans problème. Tant que la tâche asynchrone est dans un format générique, elle restitue donc les données à n'importe quel appel (via un rappel ou un gestionnaire), au lieu de toujours afficher les résultats dans l'interface utilisateur de l'application, il n'y aura pas de problèmes majeurs.

+0

hmm comment pourrais-je utiliser un gestionnaire ou rappel. Je pense que cela pourrait être ce qui me manque dans mon problème ici: http://stackoverflow.com/questions/20792944/appwidgetprovider-public-void-onenabled-context-context-does-not-effect-widget – Mike

4

Vous n'avez pas besoin de créer la tâche asynchrone dans le service. Le service fonctionne déjà sur un thread d'arrière-plan afin que vous puissiez faire toutes les tâches intensives que vous faisiez dans doInBackground dans le Service. Vous devriez toujours être capable d'appeler le AsyncTask dans le Service, mais vous n'avez pas besoin d'utiliser un AsyncTask à ce stade.

Here est un exemple de widget avec un service.

0

Voici les principales différences:

threads ou tâches Async exécutent leurs tâches dans un thread d'arrière-plan ainsi qu'ils ne bloquent pas le thread principal, tandis qu'un service effectue son travail dans le thread principal. Par conséquent, si un service exécute une tâche intensive telle que l'appel d'un service Web, il peut bloquer le thread principal jusqu'à la fin. Ainsi, pour les tâches intensives, un service doit exécuter son travail dans un thread d'arrière-plan. Récapitulatif, Thread (tâche asynchrone) exécute la tâche en arrière-plan (pas le thread principal du bloc) et le service peut bloquer le thread principal jusqu'à ce qu'il se termine.

Questions connexes