stopSelf() vs stopSelf(int) vs stopService(Intention)
Quelle est la différence dans l'appel
stopSelf()
, stopSelf(int)
ou stopService(new Intent(this,MyServiceClass.class))
à l'intérieur de onStartCommand()
?
par exemple, si je commence à les mêmes services deux fois de cette façon:
...
Intent myIntent1 = new Intent(AndroidAlarmService.this, MyAlarmService.class);
myIntent1.putExtra("test", 1);
Intent myIntent2 = new Intent(AndroidAlarmService.this, MyAlarmService.class);
myIntent2.putExtra("test", 2);
startService(myIntent1);
startService(myIntent2);
...
Et de mettre en œuvre onStartCommand de cette façon:
public int onStartCommand(Intent intent, int flags, int startId)
{
Toast.makeText(this, "onStartCommand called "+intent.getIntExtra("test", 0), Toast.LENGTH_LONG).show();
stopService(new Intent(this,MyAlarmService.class));
return START_NOT_STICKY;
}
J'ai exactement le même comportement avec les trois méthodes,
c'est onDestroy ne sera appelée après onStartCommand est exécutée deux fois.
Vous devez vous connecter pour publier un commentaire.
J'espère que cela va vous aider à:
Un service démarré doit gérer son propre cycle de vie. Qui est, le système ne s'arrête pas ou détruire le service, sauf si elle doit récupérer de la mémoire système et le service continue de fonctionner après onStartCommand() retourne. Ainsi, le service doit arrêter de lui-même en appelant stopSelf() ou à un autre composant peut l'arrêter en appelant stopService().
Une fois demandé d'arrêter avec stopSelf() ou stopService(), le système détruit le service dès que possible.
Toutefois, si votre service gère plusieurs demandes de onStartCommand() en même temps, vous ne devriez pas arrêter le service lorsque vous avez terminé le traitement d'un démarrage, car vous risquez de vous avez reçu un nouveau départ demande (en s'arrêtant à la fin de la première demande de mettre fin à la seconde). Pour éviter ce problème, vous pouvez utiliser stopSelf(int) pour vous assurer que votre demande d'arrêter le service est toujours basé sur les plus récentes démarrage.
Qui est, lorsque vous appelez stopSelf(int), vous transmettre l'ID du début de la demande (le startId livré à onStartCommand()) à laquelle votre demande d'arrêt correspond. Ensuite si le service a reçu une nouvelle demande avant de commencer vous avez été en mesure d'appeler stopSelf(int), puis l'ID ne correspond pas à et le service ne s'arrête pas.
La fonctionnalité de base de tous les 3 méthodes sont les mêmes et c'est pourquoi ils ont des noms similaires. Il y a des petites différences entre eux.
Classe : il appartient à
android.app.Service
classeAppelé à Partir de : Cette méthode est destinée à être appelé à partir de à l'intérieur de le service uniquement.
Comportement : Service va être arrêté.
onDestroy()
état appelé.Classe : il appartient à
android.app.Service
classeAppelé à Partir de : Cette méthode est destinée à être appelé à partir de à l'intérieur de le service uniquement.
Comportement : Il y a une méthode à partir de l'ancienne version stopSelfResult(int startId). Cette méthode est la plus récente version de cette méthode. Service arrêtée seulement si la dernière fois qu'il a commencé était startId.
onDestroy()
état appelé.Peut-être vous pouvez trouver cette méthode utile seulement dans le cas où vous avez commencé à 2-3 instance du même service, mais vous voulez vous arrêter dans un ordre que vous avez reçu avec startId liste stockée avec vous. Devez être très prudent lors de l'utilisation de cette méthode.
Classe : il appartient à
android.content.Context
classeAppelé à Partir de : Cette méthode est destinée à être appelé à partir de à l'extérieur le service si vous êtes autorisé à appeler à partir de l'intérieur.
Comportement : Si le service n'est pas en cours d'exécution, il ne se passe rien. Sinon, il est arrêté. Notez que les appels à startService() ne sont pas comptés -- ceci arrête le service, peu importe combien de fois il a été lancé.
onDestroy()
état appelé.stopService() est appelée à partir de la classe de l'endroit où le Service est démarré. stopSelf() est appelée au cours de l'exécution d'un service de classe pour arrêter le Service
stopSelf(int)- qui est utilisé pour arrêter les plus récentes de service de démarrage basé sur onStartCommand(Intent i, int f, int startid)'s int startid.
stopSelf()- ce qui est appelé par le service lui-même , à laquelle la tâche a été achevée.
stopService(But) - ce qui est explicitement appelé à partir d'une activité pour arrêter le service.
Il existe deux types de
stopSelf()
. On prend unstartId
paramètre pour indiquer que vous avez terminé de travailler sur une commande spécifique, et donc, le service devrait de façon opportuniste de l'arrêter si il n'y a pas d'autres commandes en suspens.startID
est passé àstopSelf(startID)
?stopSelf()
pour tousstartID
les valeurs qui vous ont été remis, le service s'arrête.