0

Die Intent s s ich mit LocalBroadcastManager broadcast scheinen nicht konsumiert zu werden, sondern akkumulieren. Jedes Mal, wenn ich eine Sendung sende, erhalte ich sowohl diese als auch alle zuvor gesendeten Sendungen in onReceive.LocalBroadcastManager Broadcast nicht konsumiert

In einer Zeitschrift JobService erstelle ich eine BroadcastReceiver mit einer IntentFilter und registriert sie dynamisch mit lbm.registerReceiver(receiver, intentFilter);. Ich starte dann eine Service, die eine Intent mit dem gleichen Filter in seinem Konstruktor erstellt, und macht lbm.sendBroadcast(intent); einmal, dann stoppt sich. sendBroadcast gibt true zurück, was anzeigen sollte, dass es am anderen Ende empfangen wurde (siehe Is there a way to tell if LocalBroadcastManager broadcasts were received?). Jedes Mal, wenn dieser Zyklus wiederholt wird, werden jedoch alle zuvor empfangenen Intents erneut empfangen. Durch die Bündelung eines Zeitstempels habe ich bestätigt, dass es wirklich die alten sind, die nur herumliegen und immer wieder empfangen werden.

Wie "konsumiere" ich die empfangenen Intent? Von dem, was ich sagen kann, sollte dies nicht notwendig sein, wenn es von onReceive erhalten wurde. Ich finde keine Methoden zum Abbrechen einer Sendung in Intent oder LocalBroadcastManager.

Wie kann ich jede Sendung nur einmal empfangen?

+1

Vergewissern Sie sich, dass Sie den BroadCastReceiver abmelden, wenn der JobService abgeschlossen ist. –

+0

hatte ich tatsächlich vergessen, dies zu tun, bevor jobFinished an einem Ort. Die Ergebnisse sehen bisher besser aus. Ein Strahl der Hoffnung?! Danke für den Tipp! – Toerndev

Antwort

0

Dank @Talha Mir, der die Lösung als Kommentar geschrieben hat.

Ich rief nur unregisterReceiver in onStopJob, nicht in anderen Pfaden. Durch das Hinzufügen wurde das Problem behoben.

Anscheinend kann eine Sendung nach onReceive bleiben, wenn der Empfänger nicht nicht registriert ist.