Domanda

Ho un problema piuttosto curioso. Ho un servizio non rilegato che chiamo usando il codice seguente dalla mia attività principale quando l'app è aperta.

//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);
.

Quando un nuovo SMS arriva nel servizio attende 3 secondi tramite un timer per garantire che l'osservatore del contenuto abbia salvato i dati sul DB SMS interno. Dopo di che è una chiamata a un intentuservice per fare il sollevamento pesante.

Per ragioni sconosciute, il servizio a volte si bloccherà e rimane bloccato su "Riavvio (vedi immagine)"

La cosa curiosa è che anche il tentativo di forzare l'arresto del servizio nella sezione Applicazioni non funziona. Scompare momentaneamente e quindi appare di nuovo con lo stesso messaggio. Anche l'utilizzo di StopService nel codice non funziona e il metodo OnDestroy all'interno del servizio non viene mai chiamato. L'unico modo per aggirarlo è quello di riavviare il telefono.

Problema è che quando è in questo stato non funziona. (È pensato per analizzare i messaggi SMS in entrata)

Sto correndo su una galassia nota 3 con Android 4.3

" servizio sospeso "

Il mio sospetto è che gli intentussertvice che fa il parsing effettivo non completano e quindi la chiamata per il servizio di smettere di sé non viene mai chiamato.

La mia domanda è, c'è un modo per costringere un intentuservice che ha appeso a fermarsi?

Questo è il codice in StartCommand nel servizio

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

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

    }

 }
.

Vista più dettagliata della stessa domanda qui https://stackoverflow.com/posts/21077517/edit

È stato utile?

Soluzione

Questa potrebbe non essere una soluzione molto elegante, ma è possibile chiamare stopSelf() direttamente nel metodo onCreate() del servizio e gestire l'azione effettiva in è onDestroy() prima di chiamare super.onDestroy().

Ho avuto un problema simile che ho risolto in questo modo.Forse questo risolverà anche il tuo problema.In bocca al lupo.;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top