Comment arrêter le service en lui-même?
J'ai démarrer un service, dans une activité, alors je veux que le service s'arrête de lui-même après un certain temps.
J'ai appelé stopSelf() dans le service, mais il ne fonctionne pas.
Comment faire de l'arrêt du service lui-même?
- Puisque la réponse est "appel stopSelf()", vous allez avoir besoin de fournir beaucoup plus de détails à propos des "il se complique pas de travail".
- besoin de plus de contenu que juste
"doesnt work"
- Comme une réponse? Hésitez pas à le marquer accepté 🙂
- hit and run ne pas choisir la meilleure réponse. fait envisager de limiter à poser des questions jusqu'à ce rep = 500, par exemple.
Vous devez vous connecter pour publier un commentaire.
En disant "ne fonctionne pas", je suppose que tu veux dire que les
onDestroy()
-méthode du service n'est pas invoquée.J'ai eu le même problème, parce que je lié certains ServiceConnection le Service lui-même en utilisant le drapeau BIND_AUTO_CREATE.
Cela provoque le service pour être gardé en vie jusqu'à ce que chaque connexion est unbound.
Une fois que j'ai modifier pour utiliser pas de drapeau (zéro), je n'ai eu aucun problème à tuer le service en lui-même (
stopSelf()
).Exemple de code:
De tuer le service (pas): il
Espère que cela a aidé.
En appelant
stopSelf()
, le service s'arrête.Veuillez assurez-vous qu'aucun fil est en cours d'exécution en arrière-plan qui vous donne l'impression que le service n'a pas cessé.
Ajouter des instructions d'impression au sein de votre fil.
Espère que cette aide.
puisque vous navez pas publier votre code, je ne peux pas savoir exactement ce que vous faites, mais vous devez déclarer QUE vous êtes à l'arrêt:
comme dans:
Si par "ne fonctionne pas" tu veux dire que le processus ne soit pas tué, alors, c'est comment android fonctionne. Le
System.exit(0)
ouProcess.killProcess(Process.myPid())
va tuer votre processus. Mais ce n'est pas de l'Android manière de faire les choses.HTH
Utilisation stopSelf() pour arrêter un service de lui-même.
Je viens de tomber sur le même problème. Dans mon cas, j'ai un singleton gestionnaire de service que j'utilise pour communiquer avec le service. Dans le gestionnaire de service est commencé comme ça:
Par la suppression de Contexte.BIND_AUTO_CREATE comme suggéré par Alik Elzin, j'ai été en mesure d'arrêter le service à l'aide de ce.stopSelf() et d'avoir onDestroy() appelée quand le faire. Ce problème est qu'après que je n'étais pas en mesure de redémarrer le service du manager à l'aide de la commande ci-dessus.
Enfin j'ai corrigé cela en utilisant une fonction de rappel de service qui indique au gestionnaire pour arrêter le service. De cette façon, le gestionnaire est toujours en charge quand il s'agit de démarrer/arrêter le service et tout semble bien fonctionner. Je ne sais pas si il y a des contre indications en le faisant de cette manière.
Le code est très simple. Créer un rappel dans le service et de le fixer dans le gestionnaire de ce genre dans votre classe de connexion:
et arrêter le service:
Dans le service, il suffit d'appeler myCallback.onStop() lorsque vous avez besoin pour l'arrêter.
Autre sale hack n'est pas mentionné ici est de lancer une exception comme des NPE. Un jour, je devais arrêter de InputMethodService et ce hack a été utile.
De laisser votre service pour arrêter de lui-même.. créer un
BroadcastReceiver
classe.. Dans votre appel de service à votre récepteur comme ça..En service
En Récepteur De Radiodiffusion
Fichier manifeste
si vous utilisez des
Thread
à votre service, après l'arrêt du service en appelantstopSelf()
oustopService()
laThread
continue de fonctionner. si tu veux arrêterThread
u devrait appelerThread.interrupted()
dans leThread
(il peut provoquer uneException
siThread
dort)