Sendungen sind verzögert

9

Wir verwenden Broadcasts, um Statusänderungen zwischen Remote-Diensten und unserer Benutzeroberfläche zu kommunizieren. Dabei entdeckten wir ein sehr merkwürdiges Verhalten: Manchmal (ich kann keine Hinweise finden, warum) sind diese Sendungen um die 8 Sekunden verzögert.

Wie wir sie senden (ziemlich einfach, mState ist nur eine Enumeration) (Remote-Prozess im Dienst):

%Vor%

Wie der statische Empfänger registriert ist (App):

%Vor%

Die Empfängerklasse (App):

%Vor%

Dies wird jetzt manchmal verzögert (immer für die gleichen Zustände)

State enum:

%Vor%

Jetzt kommt der seltsame Teil: Wenn ich einen dynamischen Empfänger registriere, empfangen wir immer ALLE Sendungen sofort dort. Der statische hat immer noch diese große Verzögerung. Wenn ich die Sendung über sendOrderedBroadcast BOTH (statisch und dynamisch) sende, habe ich diese Verzögerung.

Dynamischer Empfänger:

%Vor%

Was ich bisher versucht habe:

  • Senden Sie die Übertragung aus dem Hauptthread / einem Worker-Thread (nichts geändert)
  • wurde mit dem Berechtigungsattribut gespielt (nichts geändert)
  • Senden Sie die Sendung mehrmals nacheinander (ohne etwas zu ändern, erhalten Sie jetzt mehrere zeitversetzte Sendungen)

Auch: Keine Ausgabe von logcat, die verwandt zu sein scheint. Versucht auf verschiedenen Geräten (OnePlus 3 7.1.1, Z3 6.0.1, S7 Edge 7.1.1), zeigen alle das gleiche Verhalten

Ich denke, dass dies zusammenhängen könnte: Android Netzwerkstatusänderung Erkennung braucht Zeit

    
Mike Kasperlik 13.06.2017, 08:31
quelle

1 Antwort

2

Nachdem ich stundenlang nach einer Antwort gesucht hatte, fand ich die? Lösung nach dem Posten dieses.

Es scheint, dass das Hinzufügen des FLAG_RECEIVER_FOREGROUND -Flags zur Absicht diese Verzögerung vollständig beseitigt. Wäre immer noch nett zu wissen, warum das passiert und ob das ein guter "Fix" ist oder ob ich etwas anderes damit zerstöre.

Das macht den Trick:

%Vor%
  

Wenn gesetzt, darf beim Senden einer Sendung der Empfänger laufen   Vordergrundpriorität mit einem kürzeren Timeout-Intervall. Während normal   Broadcasts werden die Empfänger nicht automatisch aus dem Internet geholt   Hintergrund Prioritätsklasse.

Quelle: Ссылка

    
Mike Kasperlik 13.06.2017 09:00
quelle