47 Stimmen

Wie kann ich den Dienst selbständig anhalten?

Ich starte einen Dienst in einer Aktivität und möchte dann, dass der Dienst nach einer Weile von selbst aufhört.

Ich habe stopSelf() im Dienst aufgerufen, aber es funktioniert nicht.

Wie lässt sich der Dienst selbst anhalten?

68voto

AlikElzin-kilaka Punkte 31624

Mit "funktioniert nicht" meinen Sie wohl, dass die onDestroy() -Methode des Dienstes wird nicht aufgerufen.

Ich hatte das gleiche Problem, weil ich gebunden einige ServiceConnection an den Dienst selbst mit dem Flag BIND_AUTO_CREATE . Dies bewirkt, dass der Dienst so lange aufrechterhalten wird, bis jede Verbindung Ungebunden .

Sobald ich das Flag auf Null gesetzt habe, konnte ich den Dienst problemlos selbst beenden ( stopSelf() ).

Beispiel-Code:

final Context appContext = context.getApplicationContext();
final Intent intent = new Intent(appContext, MusicService.class);
appContext.startService(intent);
ServiceConnection connection = new ServiceConnection() {
  // ...
};
appContext.bindService(intent, connection, 0);

Beenden des Dienstes (nicht des Prozesses):

this.stopSelf();

Ich hoffe, das hat geholfen.

22voto

sneaker_android Punkte 380

Durch einen Anruf stopSelf() wird der Dienst eingestellt.

Vergewissern Sie sich, dass kein Thread im Hintergrund läuft, der den Eindruck erweckt, dass der Dienst nicht gestoppt wurde.

Fügen Sie Druckanweisungen in Ihren Thread ein.

Ich hoffe, das hilft.

5voto

tony gil Punkte 9305

Da Sie Ihren Code nicht veröffentlicht haben, kann ich nicht genau wissen, was Sie tun, aber Sie müssen erklären, WAS Sie stoppen:

this.stopSelf();

wie in:

public class BatchUploadGpsData extends Service {
    @Override
    public void onCreate() {
        Log.d("testingStopSelf", "here i am, rockin like a hurricane.   onCreate service");
        this.stopSelf();
    }

4voto

Jayesh Punkte 48937

Wenn Sie mit "funktioniert nicht" meinen, dass der Prozess nicht beendet wird, dann ist das die Funktionsweise von Android. Die System.exit(0) oder Process.killProcess(Process.myPid()) wird Ihren Prozess beenden. Aber das ist nicht die Art und Weise, wie Android die Dinge regelt.

HTH

4voto

abbasalim Punkte 2768
   stopForeground(true);
            stopSelf();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X