2012-03-31 9 views
2

Ich verwende den Intent-Dienst, um regelmäßig Abfragen an meinen Server zu senden, um zu prüfen, ob Updates vorhanden sind. Im Intent-Service gibt es einen Timer-Task, der den Server alle 3 Sekunden abfragt. Dieser startet beim Beenden der Anwendung.
Jetzt, wenn der Benutzer wieder in die Anwendung kommt, möchte ich den Dienst beenden.
Wie soll ich das tun? Wie kann ein Intent-Service, der eine Timertask ausführt, von einer anderen Aktivität aus gestoppt werden?
Bitte geben Sie Vorschläge für Intent Service, weil das ist, was ich verwende.Stoppen eines Intent-Dienstes, der in Android eine Zeittask ausführt

Antwort

1

Vielleicht ist es besser, nur Service anstelle von IntentService zu verwenden.

public class UpdateService extends Service { 

    public class LocalBinder extends Binder { 
     public void startUpdates() { 
      // start updateThread if it not started, or 
      // notify about resuming probes 
     } 

     public void stopUpdates() { 
      // make updateThread to wait, until startUpdates 
      // called again. 
      // 
      // REMEMBER this method can be called when startUpdates didnt called. 
     } 
    } 

    // For simplicity we will use local binder. 
    private final IBinder binder = new LocalBinder(); 

    @Override 
    public IBinder onBind(Intent intent) { 
     return binder; 
    } 

    private Thread updateThread = new Thread() { 
     @Override 
     public void run() { 
     while (true) { 
      // Do updates. Sleep/awake managment. 
     } 
     } 
    }; 
} 

Nur bind Service (mit AUTO_CREATE_FLAG) und Updates starten, wenn Sie benötigen werden. Wenn Ihre Aktivität zeigt, binden Sie sie einfach erneut an den Dienst und lassen Sie sie Aktualisierungen stoppen.

0

Zunächst kann IntentService nicht gestoppt werden. Er wird erst beendet, nachdem alle Aufgaben in seiner Warteschlange abgeschlossen wurden. Daher sollte IntentService hier nicht verwendet werden.

Verwandte Themen