Le Service ne s'arrêtent pas lorsque stopService méthode est appelée
J'ai actuellement un Service qui fonctionne très bien lorsque je le démarre, mais lorsque je tente de l'arrêter à l'aide de la stopService sa méthode onDestroy méthode n'est pas appelée.
Voici le code que j'utilise pour essayer d'arrêter le Service
stop_Scan_Button = (Button)findViewById(R. id.stopScanButton);
stop_Scan_Button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Log.d("DEBUGSERVICE", "Stop Button pressed");
Intent service = new Intent(CiceroEngine. CICERO_SERVICE);
releaseBind();
Log.d("Stop_Scan_Button", "Service: " + service.toString());
stopService(service);
Log.d("Stop_Scan_Button", "Service should stop! ");
}
});
Suis-je en droit de penser que lorsque stopService est utilisée, elle appelle la méthode onDestroy du Service? Lorsque j'appuie sur mon bouton arrêter le balayage de la onDestroy()
méthode dans mon Service n'est pas appelé.
Est-il autre chose que je suis absent, je devrais mettre pour arrêter le service?
EDIT: pour ajouter onServiceConnected()
qui est appelé lorsque le stopService est exécuté à la place de onServiceDisconnected()
, pourquoi cela se produit?
EDIT:Pour ajouter plus d'info en ce qui concerne la Liaison
J'appelle bindService dans le onCreate() la méthode et j'ai ensuite les releaseBind() la méthode de séparer le Service.
Voici le code de cette méthode:
public void releaseBind(){
unbindService(this);
}
Alors je suppose que la déliaison est pas mon problème?
Vous devez vous connecter pour publier un commentaire.
Je vais deviner que d'avoir un appel de méthode pour
releaseBind()
signifie que vous avez déjà appelébindService()
sur ce service, et quereleaseBind()
appelleunbindService()
. Si ma supposition est incorrecte, s'il vous plaît ignorer cette réponse.Un service va s'arrêter après tous
bindService()
appels ont eu leur correspondantunbindService()
appels. Si il n'y a pas lié les clients, le service sera également besoin d'stopService()
si et seulement si quelqu'un appeléstartService()
sur le service.Donc, il y a peu de possibilités ici:
unbindService()
etstopService()
sont asynchrones, quelque chose de peut-être aller détraque avec le temps, dans ce cas, vous pouvez obtenir une meilleure chance si vous appelezstopService()
de votreServiceConnection
'sonServiceDisconnected()
méthodeAussi, gardez à l'esprit que le moment exact de la prestation de service étant détruit, c'est jusqu'à Android et peut ne pas être immédiate. Ainsi, par exemple, si vous comptez sur le
onDestroy()
à votre service pour arrêter un certain travail qui est fait, pensez à utiliser un autre déclencheur pour que (par exemple, l'activité de l'appel d'unestopDoingStuff()
méthode par le biais du service liant interface).bindService()
etunbindService()
sont asynchrones et sont vouées à l'échec de la façon dont vous les utilisez. Malheureusement, je n'ai aucune idée de ce que vous essayez d'accomplir ici, donc je n'ai pas de bonne façon de vous conseiller davantage.stopSelf()
n'est généralement pas utilisé avec la liaison.onServiceDisconnected()
est "appelée lorsqu'une connexion a été perdue. Cela se produit généralement lorsque le processus qui héberge le service est en panne ou a été tué." I. e. il ne devrait pas être appelé quand il n'y a plus de liants.Sont tous de vos fixations fermé?
.
hai les gars, désolé pour la réponse tardive mais pour autant que je sais que j'ai réussi à arrêter le service dans ce code: vous pouvez consulter un lien ici.
et dans les services de la classe: