2012-08-24 11 views
7

Ho un IntentSerivce che viene eseguito in background a volte e può essere piuttosto un lungo processo in esecuzione in alcuni casi. Fornisco un'opzione per l'utente per uscire dall'applicazione che fondamentalmente si ferma e interroga e ignora qualsiasi notifica push GCM. Ma se arriva una notifica push e il IntentService impiega un po 'di tempo a finire di fare quello che deve (ottiene le informazioni da un server e invia una notifica all'utente se necessario, come un nuovo messaggio arrivato o qualcosa del genere).Fermare un IntentService da un'attività

Qui è il problema, se l'utente decide di "Esci" l'applicazione, mentre il intentservice è ancora in esecuzione avranno ancora ottenere la notifica che io non voglio. So che esiste il metodo stopSelf() per il servizio, ma ho bisogno di fermarlo in un'attività quando conosco l'utente "Esci" dall'applicazione tramite un pulsante di menu. L'invio di un'altra intent al servizio non funziona in quanto gli intenti vengono accodati e chiamando context.stopService(intent); nella mia attività non funziona neanche così come altro posso fermarlo?

+0

Possibile duplicato di [Forzare un IntentService di fermare immediatamente] (http://stackoverflow.com/questions/11258083/forcing- an-intentservice-to-stop-immediatamente) –

risposta

7

Si passa un nuovoa stopService(Intent) o quello originale utilizzato in startService(Intent). Passare l'intenzione originale dovrebbe interrompere il servizio.

In mancanza, è possibile utilizzare un Handler per passare il servizio a Message. Avere la IntentService implementare l'interfaccia Handler.Callback e creare un nuovo Handler(Handler.Callback) nel vostro Activity, passando il tuo IntentService come callback. Quindi implementare il onHandleMessage() nel vostro IntentService chiamare stopSelf() e avere il vostro Activity passare un messaggio ad esso quando si vuole fermare.

+1

Dove si ottiene dall'istanza del servizio (intendo l'istanza Handler.Callback) quando è stata avviata l'attività dalla notifica? – LiMar

3

Di seguito il codice è perfettamente funzionando benissimo per me di smettere IntentService da Activity:

stopService(new Intent(getApplicationContext(), MyIntentService.class)); 
+0

grazie mille! Ha funzionato perfettamente per me! – CodeDoctorJL

Problemi correlati