So starten Sie den Dienst neu, nachdem die App von den letzten Aufgaben gelöscht wurde

9

Ich habe einen Dienst erstellt, um den aktuellen Standort des Geräts in regelmäßigen Abständen abzurufen. Ich möchte, dass der Dienst im Hintergrund ausgeführt wird, auch wenn die App von kürzlich geöffneten Apps gelöscht wird. Derzeit wird der Dienst nur im Hintergrund ausgeführt, bis die App in den kürzlich geöffneten Apps verfügbar ist, wird jedoch sofort beendet, wenn die App entfernt wird (oder auf andere Weise getötet wird). Ich habe alle Arten von Hilfe ausprobiert, die im Stapelüberlauf verfügbar sind, aber ich kann das nicht lösen. Bitte helfen Sie. Hier ist mein Code für den Service.

%Vor%     
Arindam Dawn 11.12.2015, 11:53
quelle

3 Antworten

13

Überschreibe onTaskRemoved () in deinem Dienst und verwende den Alarmmanager, um den Dienst erneut zu starten. Unten ist Code von unserer App, der das gleiche tut und gut funktioniert:

%Vor%

Da Sie den Standort in regelmäßigen Abständen auch dann senden möchten, wenn der Dienst bei wenig Arbeitsspeicher (oder aus irgendeinem Grund) beendet wird, empfehle ich Ihnen, die uncaughtException zu behandeln, um sie nach N Sekunden neu zu starten. So haben wir es in unserer App gemacht, die perfekt funktioniert:

%Vor%

Hinweis: Ich denke, und ich erinnere mich daran, dass ich auf Kitkat verifiziert habe, dass START_STICKY auf Kitkat und höheren API-Levels nicht funktioniert. Bitte überprüfen Sie dies für sich selbst.

MEHR:
Da Sie das Senden von Loks regelmäßig durchführen, müssen Sie möglicherweise den Deep Sleep-Modus berücksichtigen. Verwenden Sie den WakefulBroadcastReceiver kombiniert mit dem AlarmManager, um die Arbeit im Tiefschlaf zu erledigen. Sehen Sie sich meinen anderen Beitrag http im Deep Sleep-Modus an.

UPDATE:
Diese Lösung funktioniert nicht (in der Tat muss nicht funktionieren), wenn der Benutzer "FORCE STOP" die Anwendung von den Einstellungen. Dies ist in der Tat gut, da das Neustarten des Dienstes keine gute Möglichkeit ist, wenn der Benutzer selbst die Anwendung stoppen möchte. Also, es ist in Ordnung.

    
cgr 11.12.2015, 12:11
quelle
0

Ersetze return Service.START_NOT_STICKY; durch return START_STICKY;

    
Hojjat Imani 11.12.2015 12:02
quelle
0

Wenn Sie NUR den Dienst neu starten möchten, nachdem er von Letzte Aufgabe beendet hat, verwenden Sie einfach

%Vor%

Wenn Sie START_STICKY verwenden, wird Ihr Dienst beim Beenden der App aus der letzten Aufgabe getötet ( onTaskRemoved gefeuert, onDestroy NICHT gefeuert) DANN Es wird automatisch neu gestartet ( onCreate gefeuert, onStartComand gefeuert)

    
Phan Van Linh 06.11.2017 03:56
quelle