2011-02-06 4 views
1

J'ai actuellement un listview qui est rempli lors de la création à partir d'un serveur web. Je veux soit interroger la base de données pour les mises à jour de routine, ou pour permettre à un script PHP de le mettre à jour. Je préférerais que ce soit mis à jour par la base de données, plutôt que d'interroger.Never Ending thread de fond?

En ce qui concerne l'interrogation, je sais que je peux implémenter un service ou un thread async. J'ai aussi trouvé la classe timertask. Pour AsyncThread: Est-ce que je peux avoir ce soit récurrent continuellement? Dois-je appeler la méthode .start à partir du

Pour TimerTask: est-ce moins efficace qu'une asyncthread ou un service?

De même ai-je besoin de créer le TimerTask à l'intérieur d'un thread? ou va-t-il créer ses propres threads?

+0

Comprenez-vous le fonctionnement des serveurs Web? Ils ne sont pas conçus pour mettre à jour le client à partir du serveur. Il y a des projets qui font cela, mais les serveurs web sont conçus pour être interrogés. – jcolebrand

+0

oui je comprends autant et avais accepté que je devrais interroger, mais je voulais être sûr, car c'est un domaine que je ne suis pas connu avec –

+0

Je voudrais juste ajouter que le code dans un service fonctionne toujours dans le même thread comme l'activité d'appel. Un IntentService, tel que suggéré par CommonsWare, exécute des tâches dans des threads de travail distincts et c'est la voie à suivre. –

Répondre

1

Essayer de transformer un serveur en client et un client en serveur, c'est comme essayer de manger dans le mauvais orifice. Il se bat contre la nature du design original. D'une part, vous ne pouvez pas compter sur votre application pour être allumé en continu, pas sur un téléphone de toute façon. Les applications sur les téléphones portables ont une faible priorité. Les applications sur les téléphones portables ont une énergie limitée qu'ils peuvent utiliser. Les applications sur téléphones portables ne seront pas toujours connectées à Internet. Par conséquent, pour une chose, vous voudrez utiliser un service sur son propre thread (vous pouvez utiliser AsyncTask si vous le souhaitez). Votre service aura besoin de son propre thread afin qu'il ne bloque pas le thread d'interface utilisateur en attente de réponses. Et vous voudrez utiliser AlarmManager pour réveiller ou mettre fin à votre service si nécessaire (puisque votre service risque de se faire tuer à plusieurs reprises, sans qu'il y ait faute de sa part).

+1

Je recommanderais d'utiliser un 'IntentService' avec' AlarmManager', donc le service peut sortir de RAM quand il ne fournit pas activement de valeur à l'utilisateur. – CommonsWare

+0

Quand vous dites que le service sera tué, je le comprends, alors devrais-je simplement définir une longueur arbitraire à son gestionnaire d'alarmes? c'est à dire. quelque chose de plus long que le taux de sondage? En outre, le site de développement android indique que alarmmanager est moins efficace qu'un gestionnaire pour les opérations de synchronisation normales qui ne nécessitent pas une heure exacte, alors pourquoi les gars vous suggèrent que sur un gestionnaire? –

+0

Stephan, quand je dis continuellement je ne veux pas dire toutes les millisecondes, je veux dire quelque chose comme interroger toutes les 30 secondes à plusieurs reprises, où par continuellement que dès qu'une tentative d'interrogation est terminée le minuteur jusqu'à la suivante commence. –

Questions connexes