2011-01-12 13 views
7

Quando un servizio è stato ucciso, come riavviarlo automaticamente?Come riavviare automaticamente un servizio ucciso?

a volte senza nemmeno chiamare onDestroy()

+1

Se il servizio è stato ucciso, è perché l'utente l'ha ucciso o il sistema operativo aveva poca memoria. Ciò significa che probabilmente non dovresti riavviarlo. Non dovresti lasciare servizi di lunga durata come quello – Falmarri

+1

grazie per la risposta, ma ci sono alcuni servizi, quando li ho uccisi, si riavvieranno presto. – SEed

risposta

0

Se avete il servizio ha ucciso, il sistema tenterà di ripartire in un secondo momento. Leggi more.

3

Ignora il onStartCommand() e fornisce START_STICKY o START_REDELIVER_INTENT (dipende dalle esigenze) come valore di ritorno. Il sistema provvederà quindi a riavviare il servizio finché non interromperai esplicitamente il servizio.

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

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

+0

Sto facendo START_STICKY. funziona bene in nexus 5 e riavvio del servizio. Ma nel servizio xiaomi viene ucciso non appena la mia applicazione sta uccidendo. – Abhi

6

ho ereditato un IntentService, così ho dovuto essere gentile. Ha funzionato per me quando ho calpestato onStartCommand(), ma

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

Cioè, lascio il genitore fa quello che dovrebbe e tornare START_STICKY.

+0

Sto facendo lo stesso. funziona bene in Nexus 5. Ma nel servizio xiaomi viene ucciso non appena la mia applicazione sta uccidendo. – Abhi

+0

In casi brutti, è possibile avviare una sveglia intenzionata ad assicurarsi che il servizio sia attivo. Fai attenzione a non usarlo troppo spesso, poiché il risveglio della CPU costa la durata della batteria. Hai un'app che fa resuscitare lo swipe per chiudere? – Meymann

Problemi correlati