Pregunta

Tengo un problema bastante curioso.Tengo un Servicio no vinculado al que llamo usando el siguiente código de mi actividad principal cuando se abre la aplicación.

//some code checks if the service is awake. if not then the code below is called        
Intent serviceIntent = new Intent(this, SMS_Listener_Service.class);
startService(serviceIntent);

Cuando llega un nuevo SMS, el Servicio espera 3 segundos mediante un temporizador para garantizar que el observador de contenido haya guardado los datos en la base de datos de SMS interna.después de eso, llama a un servicio de intención para que haga el trabajo pesado.

Por razones desconocidas, el Servicio a veces se bloquea y se atasca al "reiniciar (ver imagen)"

Lo curioso es que ni siquiera intentar Forzar la detención del servicio en la sección de aplicaciones funciona.Desaparece momentáneamente y luego vuelve a aparecer con el mismo mensaje.El uso de stopService en el código tampoco funciona y nunca se llama al método OnDestroy dentro del servicio.La única forma de evitarlo es reiniciar el teléfono.

El problema es que cuando está en este estado no funciona (está destinado a analizar mensajes SMS entrantes).

Estoy ejecutando esto en un galaxy note 3 con android 4.3

"Hanging Service"

Mi sospecha es que el Intentservice que realiza el análisis real no se completa y, por lo tanto, nunca se llama a la llamada para que el servicio se detenga.

Mi pregunta es, ¿hay alguna manera de forzar la detención de un servicio de intención que se ha bloqueado?

este es el código en StartCommand en el servicio

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

    if (!blnAutoSyncisEnabled) {
        stopSelf();
        return 0;
    } else {
        return START_STICKY;

    }

 }

vista más detallada de la misma pregunta aquí https://stackoverflow.com/posts/21077517/edit

¿Fue útil?

Solución

Puede que esta no sea una solución muy elegante, pero puedes llamar stopSelf() directamente en el servicio onCreate() método y manejar la acción real en su onDestroy() antes de llamar super.onDestroy().

Tuve un problema similar que solucioné de esta manera.Quizás esto también resuelva tu problema.Buena suerte.;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top