2012-08-24 10 views
7

Ich habe eine IntentSerivce, die manchmal im Hintergrund läuft und es kann in bestimmten Fällen ein ziemlich langer Prozess sein. Ich gebe eine Option für den Benutzer, die Anwendung zu beenden, die im Grunde nur stoppt und abfragt und ignoriert alle GCM Push-Benachrichtigungen. Aber wenn eine Push-Benachrichtigung eintraf und die IntentService eine Weile dauert, um das zu tun, was sie tun muss (holt Informationen von einem Server und sendet eine Benachrichtigung an den Benutzer, falls nötig, wie eine neue Nachricht angekommen oder so).Stoppen eines IntentService von einer Aktivität

Hier ist das Problem, wenn der Benutzer wählt, die App zu "beenden", während die intentservice noch läuft sie immer noch die Benachrichtigung, die ich nicht will. Ich weiß, dass es die stopSelf() Methode für den Dienst gibt, aber ich muss es in einer Aktivität stoppen, wenn ich den Benutzer "Quit" die Anwendung über eine Menüschaltfläche kenne. Senden einer anderen intent an den Dienst funktioniert nicht, da die Absichten in der Warteschlange eingereiht und Aufruf von context.stopService(intent); in meiner Aktivität funktioniert auch nicht so, wie sonst kann ich es stoppen?

+0

Mögliche Duplikat [Erzwingen eines IntentService sofort zu stoppen] (http://stackoverflow.com/questions/11258083/forcing- an-intentionservice-to-stop-sofort) –

Antwort

7

Übergeben Sie eine neue Intent in stopService(Intent) oder die ursprüngliche in startService(Intent). Das Übergeben der ursprünglichen Absicht sollte den Dienst stoppen.

Fehler, dass Sie eine Handler verwenden können, um den Dienst eine Message zu übergeben. Lassen Sie die IntentService implementieren Sie die Handler.Callback Schnittstelle und erstellen Sie eine neue Handler(Handler.Callback) in Ihrem Activity, übergeben Sie Ihre IntentService als Rückruf. Dann implementieren Sie die onHandleMessage() in Ihrem IntentService zu stopSelf() aufrufen und Ihre Activity eine Nachricht an sie weitergeben, wenn Sie es beenden möchten.

+1

Woher kommen Sie von der Dienstinstanz (ich meine die Handler.Callback-Instanz), wenn in der Aktivität von der Benachrichtigung aus begonnen wurde? – LiMar

3

Below-Code ist perfekt funktioniert gut für mich IntentService von Aktivität zu stoppen:

stopService(new Intent(getApplicationContext(), MyIntentService.class)); 
+0

vielen dank! Es hat perfekt für mich funktioniert! – CodeDoctorJL

Verwandte Themen