2012-08-24 11 views
7

Tengo un IntentSerivce que se ejecuta en segundo plano a veces y puede ser un proceso bastante largo en ciertas instancias. Doy una opción para que el usuario salga de la aplicación, que básicamente se detiene e interroga e ignora cualquier notificación push GCM. Pero si entró una notificación de inserción y el IntentService tarda un tiempo en terminar haciendo lo que tiene que hacer (obtiene información de un servidor y envía una notificación al usuario si es necesario, como si hubiera llegado un mensaje nuevo o algo así).Deteniendo un servicio de intención de una actividad

Este es el problema, si el usuario elige "Salir" de la aplicación mientras el intentservice aún se está ejecutando, seguirá recibiendo la notificación que yo no quiero. Sé que existe el método stopSelf() para el servicio, pero debo detenerlo en una actividad cuando sé que el usuario "Salió" de la aplicación mediante un botón de menú. Enviar otro intent al servicio no funciona, ya que los intentos se ponen en cola y llamar a context.stopService(intent); en mi actividad tampoco funciona, así que ¿cómo más puedo detenerlo?

+0

Posible duplicado de [Forzar un IntentService para detener de inmediato] (http://stackoverflow.com/questions/11258083/forcing- an-intentservice-to-stop-immediate) –

Respuesta

7

¿Está pasando un nuevo Intent en stopService(Intent) o el original utilizado en startService(Intent). Pasar el Intento original debe detener el servicio.

En caso de que falle, podría usar un Handler para pasar el servicio a Message. Haga que el IntentService implemente la interfaz Handler.Callback y cree un nuevo Handler(Handler.Callback) en su Activity, pasando su IntentService como devolución de llamada. Luego, implemente el onHandleMessage() en su servicio de intendencia para llamar al stopSelf() y haga que su Activity le envíe un mensaje cuando desee que se detenga.

+1

¿Dónde se obtiene de la instancia de servicio (me refiero a la instancia de Handler.Callback) cuando en la actividad se inició desde la notificación? – LiMar

3

A continuación código está trabajando perfectamente bien para que deje de IntentService de la Actividad:

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

muchas gracias! ¡Funcionó perfectamente para mí! – CodeDoctorJL

Cuestiones relacionadas