stopSelf() vs. stopSelf(int) vs. stopService(Intent)

Lesezeit: 4 Minuten

Benutzer-Avatar
GionJh

Was ist der Unterschied beim Anrufen
stopSelf() , stopSelf(int) oder stopService(new Intent(this,MyServiceClass.class))

Innerhalb onStartCommand() ?

Zum Beispiel, wenn ich dieselben Dienste zweimal auf diese Weise starte:

...
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);
...

Und implementieren Sie onStartCommand auf diese Weise:

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;
}

Ich erhalte mit den drei Methoden genau das gleiche Verhalten, das heißt, onDestroy wird nur aufgerufen, nachdem onStartCommand zweimal ausgeführt wurde.

Benutzer-Avatar
SourabhTech

Ich hoffe, dies wird dir helfen:

Ein gestarteter Dienst muss seinen eigenen Lebenszyklus verwalten. Das heißt, das System stoppt oder zerstört den Dienst nicht, es sei denn, es muss Systemspeicher wiederherstellen und der Dienst läuft weiter, nachdem onStartCommand() zurückgegeben wurde. Der Dienst muss sich also selbst stoppen, indem er stopSelf() aufruft, oder eine andere Komponente kann ihn stoppen, indem er stopService() aufruft.

Nach Aufforderung zum Stoppen mit stopSelf() oder stopService() zerstört das System den Dienst so schnell wie möglich.

Wenn Ihr Dienst jedoch mehrere Anforderungen an onStartCommand() gleichzeitig verarbeitet, sollten Sie den Dienst nicht stoppen, wenn Sie mit der Verarbeitung einer Startanforderung fertig sind, da Sie seitdem möglicherweise eine neue Startanforderung erhalten haben (am Ende der ersten Anfrage würde die zweite beenden). Um dieses Problem zu vermeiden, können Sie mithilfe von stopSelf(int) sicherstellen, dass Ihre Anforderung zum Stoppen des Dienstes immer auf der neuesten Startanforderung basiert.

Das heißt, wenn Sie stopSelf(int) aufrufen, übergeben Sie die ID der Startanforderung (die an onStartCommand() gelieferte startId), der Ihre Stoppanforderung entspricht. Wenn der Dienst dann eine neue Startanforderung erhalten hat, bevor Sie stopSelf(int) aufrufen konnten, stimmt die ID nicht überein und der Dienst wird nicht beendet.

Benutzer-Avatar
scott

Hier ist eine vereinfachte Beschreibung:

  • stopSelf() wird benutzt um stets Stoppen Sie den aktuellen Dienst.

  • stopSelf(int startId) wird auch verwendet, um den aktuellen Dienst zu stoppen, aber nur wenn startId war die ID, die beim letzten Start des Dienstes angegeben wurde.

  • stopService(Intent service) wird verwendet, um Dienste zu stoppen, aber aus außen der zu stoppende Dienst.

Dies ist die Referenzseite.

Die Kernfunktionalität aller 3 Methoden ist gleich und deshalb haben sie ähnliche Namen. Es gibt sehr kleine Unterschiede zwischen ihnen.

  • public final void stopSelf()

Klasse : Dies gehört zu android.app.Service Klasse

Angerufen von : Diese Methode soll von aufgerufen werden Innerhalb nur der Dienst.

Verhalten : Der Dienst wird gestoppt. onDestroy() Staat genannt.

  • public final void stopSelf(int startId)

Klasse : Dies gehört zu android.app.Service Klasse

Angerufen von : Diese Methode soll von aufgerufen werden Innerhalb nur der Dienst.

Verhalten : Es gibt eine Methode aus der älteren Version stopSelfResult(int startId). Diese Methode ist eine neuere Version dieser Methode. Der Dienst wird gestoppt nur wenn das letzte Mal, dass es gestartet wurde, startId war. onDestroy() Staat genannt.

Möglicherweise finden Sie diese Methode nur dann hilfreich, wenn Sie 2-3 Instanzen desselben Dienstes gestartet haben, diese jedoch in einer Reihenfolge stoppen möchten, die Sie mit der bei Ihnen gespeicherten Start-ID-Liste erhalten haben. Sie müssen bei der Anwendung dieser Methode sehr vorsichtig sein.

  • öffentlicher abstrakter boolescher Wert stopService (Intent-Dienst)

Klasse : Dies gehört zu android.content.Context Klasse

Angerufen von : Diese Methode soll von aufgerufen werden außen der Service, obwohl Sie von innen anrufen dürfen.

Verhalten : Wenn der Dienst nicht läuft, passiert nichts. Andernfalls wird es gestoppt. Beachten Sie, dass Aufrufe von startService() nicht gezählt werden – dies hält den Dienst an, egal wie oft er gestartet wurde. onDestroy() Staat genannt.

Benutzer-Avatar
nawaab saab

stopService() wird von der Klasse aufgerufen, von der aus der Dienst gestartet wird. stopSelf() wird innerhalb der laufenden Dienstklasse aufgerufen, um den Dienst zu stoppen

stopSelf()=Dienst stoppen, falls er zuvor gestartet wurde.

stopSelf(int startId)=Alte Version von stopSelfResult(int), die kein Ergebnis zurückgibt.

stopSelfResult(int startId)=Den Dienst stoppen, wenn er zum letzten Mal gestartet wurde, startId. Sein boolesches Ergebnis.

Benutzer-Avatar
Sekhar Madhiyazagan

stopSelf(int)– wird verwendet, um den letzten Startdienst basierend auf der int startid von onStartCommand (Intent i, int f, int startid) zu stoppen.

stopSelf()– wird vom Dienst selbst aufgerufen, wenn die Aufgabe abgeschlossen ist.

stopService(Intent) – wird explizit von einer Aktivität aufgerufen, um den Dienst zu stoppen.

Benutzer-Avatar
MKJParekh

Es gibt zwei Geschmacksrichtungen stopSelf(). Man nimmt eine startId -Parameter, um anzugeben, dass Sie die Arbeit an einem bestimmten Befehl abgeschlossen haben, und der Dienst daher opportunistisch anhalten sollte, wenn keine anderen ausstehenden Befehle vorhanden sind.

  • Aber der Service wird eingestellt, wenn er gleich ist startID übergeben wird stopSelf(startID)?

    – Malwinder Singh

    18. Juni 2015 um 5:33 Uhr

  • @MS: Wie ich in meiner Antwort feststellte, “sollte der Dienst opportunistisch anhalten, wenn keine anderen ausstehenden Befehle vorhanden sind”. Also, wenn Sie angerufen haben stopSelf() zum alle startID Werte, die Sie übergeben haben, wird der Dienst beendet.

    – CommonsWare

    18. Juni 2015 um 11:09 Uhr

1102880cookie-checkstopSelf() vs. stopSelf(int) vs. stopService(Intent)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy