Frage

Ich habe ein ziemlich merkwürdiges Problem.Ich habe einen ungebundenen Dienst, den ich mit dem folgenden Code aus meiner Hauptaktivität heraus aufrufe, wenn die App geöffnet wird.

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

Wenn eine neue SMS eingeht, wartet der Dienst über einen Timer drei Sekunden lang, um sicherzustellen, dass der Inhaltsbeobachter Daten in der internen SMS-Datenbank gespeichert hat.Danach ruft es einen Intentservice auf, um die schwere Arbeit zu erledigen.

Aus unbekannten Gründen hängt der Dienst manchmal und bleibt beim „Neustart (siehe Bild)“ hängen.

Das Merkwürdige daran ist, dass selbst der Versuch, das Beenden des Dienstes im Anwendungsbereich zu erzwingen, nicht funktioniert.Es verschwindet kurzzeitig und erscheint dann wieder mit der gleichen Meldung.Die Verwendung von stopService im Code funktioniert ebenfalls nicht und die OnDestroy-Methode innerhalb des Dienstes wird nie aufgerufen.Der einzige Ausweg besteht darin, das Telefon neu zu starten.

Das Problem ist, dass es in diesem Zustand nicht funktioniert (es ist dazu gedacht, eingehende SMS-Nachrichten zu analysieren).

Ich verwende es auf einem Galaxy Note 3 mit Android 4.3

"Hanging Service"

Mein Verdacht ist, dass der Intentservice, der die eigentliche Analyse durchführt, nicht abgeschlossen wird und daher der Aufruf, den Dienst selbst zu stoppen, nie aufgerufen wird.

Meine Frage ist: Gibt es eine Möglichkeit, einen hängengebliebenen Intentservice zum Stoppen zu zwingen?

Dies ist der Code in StartCommand im Dienst

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

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

    }

 }

Eine detailliertere Ansicht derselben Frage finden Sie hier https://stackoverflow.com/posts/21077517/edit

War es hilfreich?

Lösung

Das ist vielleicht keine sehr elegante Lösung, aber Sie können anrufen stopSelf() direkt im Service onCreate() Methode und behandeln Sie die eigentliche Aktion darin onDestroy() bevor Sie anrufen super.onDestroy().

Ich hatte ein ähnliches Problem, das ich auf diese Weise behoben habe.Vielleicht löst dies auch Ihr Problem.Viel Glück.;)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top