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):
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:
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
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: Ссылка
Tags und Links android android-broadcastreceiver