17

In meinem Android App leite ich eine IntentService von einer Aktivität innerhalb vonWie kann ein IntentService auch dann ausgeführt werden, wenn die App geschlossen ist?

startService(new Intent(this, MyService.class)); 

Aufruf Und es wirkt wie ein Zauber. Ich kann zwischen Activies wechseln, die Home-Taste drücken, um zu anderen Apps zu wechseln ... und es funktioniert immer noch. Aber wenn ich meine App vom Bildschirm recents entferne, wird mein Dienst gestoppt. Wie kann ich das vermeiden? Mit anderen Worten: Wie kann ich meinen Dienst aufrechterhalten, auch wenn meine App von den letzten Apps geschlossen wird?

Mein Service-Code lautet wie folgt:

public class MyService extends IntentService { 

public MyService() { 
    super("MyService"); 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    //Here I run a loop which takes some time to finish 
} 

} 
+0

IntentService verwenden wird nicht die ganze Zeit laufen, aber es funktioniert auf Intent-Basis. Sie senden, sagen wir, einen Befehl zu tun (einen Job auszuführen), verwenden Intent und Service führt diesen Job aus und stoppt sich danach. – Stan

+0

verwandt für Service http://stackoverflow.com/questions/16651009/android-service-stops-when-app-is-closed –

+0

bezogen http://stackoverflow.com/questions/19562914/keeping-alive-intent-service -nach der Anmeldung-ist-getötet –

Antwort

10

IntentService ist nicht die ganze Zeit laufen, aber es funktioniert auf Intent-Basis. Sie senden, sagen wir, einen Befehl zu tun (einen Job auszuführen), verwenden Intent und Service führt diesen Job aus und stoppt sich selbst nach dem Warten auf andere Absicht.
Sie sollten das übliche Service anstelle von IntentService verwenden, um Ihr Ziel zu erreichen. Der Dienst sollte als START_STICKY konfiguriert werden.

+1

Nein, ich meine nicht, dass mein Dienst die ganze Zeit läuft. Mein Dienst muss eine lang andauernde Operation durchführen. Was ich tun muss, ist, dass mein Dienst diese Operation auch dann ausführt, wenn meine App von den Neukunden geschlossen wird. Wenn es fertig ist, sollte es sich selbst beenden – fergaral

+0

Nochmals: Sie sollten den üblichen Service anstelle von IntentService verwenden, um Ihr Ziel zu erreichen. – Stan

+0

Ich werde es versuchen. Vielen Dank! – fergaral

5

in Ihrer Serviceklasse @OverrideonStartCommand Methode

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    // We want this service to continue running until it is explicitly 
    // stopped, so return sticky. 
    return START_STICKY; 
} 

To Kill a Service selbst, können Sie stopSelf()

+0

Ist das wirklich sicher? Die Dokumentation besagt 'Sie sollten diese Methode nicht für Ihren IntentService überschreiben. Überschreiben Sie stattdessen onHandleIntent (Intent), das das System aufruft, wenn der IntentService eine Startanforderung erhält –

Verwandte Themen