J'ai un service qui vérifie sur une page Web toutes les 60 secondes que j'utilise un AsyncTask au service de le faire et je le rendre Thread.thisThread.sleep (60000); avant de vérifier
Veuillez ne pas faire cela.
D'abord, rendez la période configurable, y compris une option «ne faites pas cela, jamais». Les utilisateurs n'aiment vraiment pas quand les développeurs écrivent des applications dont le but principal semble être d'utiliser une tonne de vie de la batterie. Garder l'appareil éveillé et interroger un serveur Web chaque minute va consommer une tonne de batterie. C'est un comportement comme celui-ci qui amène les utilisateurs à exécuter tous les tueur de tâches qu'ils peuvent trouver. Deuxièmement, en particulier pour les périodes supérieures à une minute, veuillez utiliser AlarmManager
et [WakefulIntentService
] [1]. Planifiez le AlarmManager
pour appeler votre application à la période choisie par l'utilisateur (idéalement via setInexactRepeating()
). Avoir le WakefulIntentService
sonder votre page Web. Si vous suivez la recette documentée WakefulIntentService
, l'appareil restera éveillé suffisamment longtemps pour que vous puissiez obtenir vos données, puis retombera endormi. Votre service ne restera pas en mémoire tout le temps. Vous obtenez votre fonctionnalité, et l'utilisateur obtient de meilleures performances de l'appareil.
Quelle version d'Android? D'après ce que j'entends, les versions ci-dessous 2.0 aimaient à tuer vos services même si vous spécifiez qu'ils courent pour toujours. La solution ici consiste à utiliser une notification de barre d'état pour maintenir le processus ouvert. –
son actualy 2.1: s – Mars
Je suppose que ce que vous entendez par échec, c'est qu'il arrête de vérifier une fois que l'appareil se met complètement en veille. Changer votre code comme CommonsWare recommandé résoudra ce problème. Vous devriez probablement penser davantage à combien de fois il faut vraiment le faire et regarder les options push. (http://code.google.com/android/c2dm/) Une connexion réseau toutes les 60 secondes permet de drainer une batterie TRES rapidement. – cistearns