17

Nella mia app Android si avvia un IntentService dall'interno di un'attività chiamandoCome mantenere un IntentService in esecuzione anche quando l'app viene chiusa?

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

e funziona come un fascino. Posso spostarmi tra le attività, premere il pulsante Home per passare ad altre app ... e funziona ancora. Ma se rimuovo la mia app dalla schermata dei recenti, il mio servizio è stato interrotto. Come posso evitare questo? In altre parole, come posso mantenere attivo il mio servizio anche se la mia app è chiusa dalle app recenti?

mio codice di servizio è il seguente:

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 non è in esecuzione tutto il tempo, ma funziona sulla base di intenti. Si invia, diciamo un comando da fare (fare un po 'di lavoro), usando Intent e il servizio esegue quel lavoro e si ferma dopo. – Stan

+0

correlati per il servizio http://stackoverflow.com/questions/16651009/android-service-stops-when-app-is-closed –

+0

correlati http://stackoverflow.com/questions/19562914/keeping-alive-intent-service -after-application-is-killed –

risposta

10

IntentService non è in esecuzione tutto il tempo, ma funziona su base di intenti. Si invia, diciamo un comando da fare (fare un po 'di lavoro), usando Intent e il servizio esegue quel lavoro e si ferma dopo quell'attesa per l'altra intenzione.
Dovresti usare il solito Service invece di IntentService per raggiungere il tuo obiettivo. Il servizio deve essere configurato come START_STICKY.

+1

No, non intendo il mio servizio in esecuzione tutto il tempo. Il mio servizio deve eseguire un'operazione di lunga durata. Quello che devo fare è che il mio servizio continui a fare quell'operazione anche se la mia app è chiusa da recenti. Una volta terminato, dovrebbe terminare automaticamente – fergaral

+0

Ancora: dovresti utilizzare il solito servizio al posto di IntentService per raggiungere il tuo obiettivo. – Stan

+0

Ho intenzione di provarlo. Grazie! – fergaral

5

nella classe di servizio @OverrideonStartCommand metodo

@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 servizio stesso, è possibile utilizzare stopSelf()

+0

È davvero sicuro? I documenti hanno dichiarato 'Non dovresti sovrascrivere questo metodo per il tuo IntentService. Invece, sovrascrivi onHandleIntent (Intent), che il sistema chiama quando IntentService riceve una richiesta di avvio. –

Problemi correlati