2011-01-12 7 views
7

Wenn ein Dienst beendet wurde, wie kann er automatisch neu gestartet werden?Wie wird ein getöteter Dienst automatisch neu gestartet?

manchmal sogar ohne onDestroy()

+1

Wenn Ihr Dienst beendet wurde, liegt das daran, dass entweder der Benutzer den Dienst beendet hat oder das Betriebssystem zu wenig Arbeitsspeicher hatte. Das bedeutet, dass Sie es wahrscheinlich nicht neu starten sollten. Du solltest keine lang laufenden Dienste wie diese lassen – Falmarri

+1

danke für die Antwort, aber es gibt einige Dienste, als ich sie tötete, werden sie sich bald neu starten. – SEed

Antwort

0

Aufruf Wenn Sie Ihren Dienst getötet haben, wird das System versuchen Sie es später erneut zu starten. Lesen Sie more.

3

Überschreibt die onStartCommand() und geben Sie START_STICKY oder START_REDELIVER_INTENT (abhängig von Ihren Bedürfnissen) als Rückgabewert. Das System wird dann sicherstellen, dass Ihr Dienst neu gestartet wird, bis Sie den Dienst explizit beenden.

http://developer.android.com/reference/android/app/Service.html#START_REDELIVER_INTENT

http://developer.android.com/reference/android/app/Service.html#START_STICKY

+0

Ich mache START_STICKY. funktioniert gut in nexus 5 und startet den Dienst neu. Aber im xiaomi-Dienst wird getötet, sobald meine Anwendung beendet wird. – Abhi

6

erbte ich eine IntentService, also musste ich sanft. Es funktionierte für mich, wenn ich onStartCommand overrode(), aber

public int onStartCommand(Intent intent, int flags, int startId) { 
    super.onStartCommand(intent, flags, startId); 
    return START_STICKY; 
} 

Das heißt, lassen die Eltern tun, was es sein sollte und zurück START_STICKY.

+0

Ich mache das gleiche. funktioniert gut in nexus 5. Aber in xiaomi Service wird getötet, sobald meine Anwendung tötet. – Abhi

+0

In schlechten Fällen können Sie einen Wecker starten, um sicherzustellen, dass Ihr Dienst live ist. Achten Sie darauf, es zu oft zu benutzen, da das Aufwachen der CPU die Lebensdauer der Batterie kostet. Haben Sie eine App, die wiederbelebt, um zu entlassen? – Meymann