2010-10-08 3 views
1

J'essaye d'écrire un service qui attend et attend des messages SMS (en utilisant un BroadcastReceiver que le serveur enregistre) et qui prendra des mesures en fonction des détails du message SMS. J'utilise une activité à startService() et stopService() pour le service. Après avoir fermé l'activité, le service continue à rester là avec son état maintenu et son BroadcastReceiver en attente, comme il se doit ... Cependant, je trouve qu'au fil du temps, de manière aléatoire, le service va redémarrer lui-même. En d'autres termes, onCreate() et onStartCommand() seront appelés même lorsque le service a déjà été démarré. Cela arrive parfois lorsque mon téléphone reste inactif pendant la nuit ...Le service Android redémarre au hasard

Quelqu'un peut-il donner un aperçu de la raison pour laquelle cela est (téléphone demande des ressources et tue un service?), Ce que je peux faire pour l'empêcher, ou ce que je peux faire pour prévenir l'état du service d'être perdu?

Merci d'avance.

Répondre

0

Je vais essayer Service.startForeground()

+0

Cela a empêché le service d'être tué. Cependant, n'importe quel Handler que j'utilisais ne travaillait pas après de longues périodes de temps. – jkiv

0

Je ne pense pas que vous deviez démarrer le service de l'activité du tout. Avoir un récepteur de diffusion qui écoute vos messages SMS et démarre le service. Une fois le travail terminé, le service doit appeler stopSelf();

+0

L'activité doit-elle simplement enregistrer/annuler l'inscription de BroadcastReceiver? Qu'arrive-t-il au BroadcastReceiver une fois l'activité terminée? – jkiv

+0

Vous définissez votre récepteur dans le manifeste avec des actions qu'il est censé écouter aussi. Plus d'infos ici http://developer.android.com/reference/android/content/BroadcastReceiver.html et ici http://developer.android.com/guide/appendix/faq/commontasks.html#broadcastreceivers –

+0

Indépendamment de la La relation Activity-BroadcastReceiver-Service, onCreate() et onStartCommand(), sont appelées lorsque le Service fait son travail. Ce qui est étrange, c'est que l'état du service est signalé comme si l'on commençait le service à neuf. Cependant, à la réception d'un SMS, je peux faire en sorte que le rapport de service soit dans son état et que son état indique ce qu'il devrait être s'il travaillait. Cela m'amène à penser qu'une seconde instance du Service est en cours de création? – jkiv

0

Android parfois (quand il est faible sur les ressources, mem/cpu) supprime les services en cours d'exécution et une fois qu'il est élevé sur les ressources à nouveau les ramène. C'est pourquoi vous voyez que vos services ont été redémarrés plusieurs fois pendant la nuit.