0

Intent s Я транслирую с LocalBroadcastManager, похоже, не потребляется, а вместо этого накапливается. Каждый раз, когда я отправляю широковещательную рассылку, я получаю как ее, так и все ранее отправленные передачи, в onReceive.LocalBroadcastManager вещание не используется

В периодической JobService я создаю BroadcastReceiver с IntentFilter и регистрации его динамически с lbm.registerReceiver(receiver, intentFilter);. Затем я запускаю Service, который создает Intent с тем же фильтром в своем конструкторе и делает lbm.sendBroadcast(intent); один раз, а затем останавливается. sendBroadcast возвращает значение true, которое должно указывать на то, что оно было получено на другом конце (см. Is there a way to tell if LocalBroadcastManager broadcasts were received?). Однако каждый раз, когда этот цикл повторяется, все полученные ранее Intents принимаются снова. Объединив временную метку, я подтвердил, что это действительно старые, которые просто лежат и получаются снова и снова.

Как я «потребляю» принятый Intent? Из того, что я могу сказать, это не обязательно, если оно было получено onReceive. Я не нашел методов для отмены широковещательной передачи в Intent или LocalBroadcastManager.

Как я могу получать каждую трансляцию только один раз?

+1

Обязательно отмените регистрацию своего BroadCastReceiver при выполнении JobService. –

+0

Я действительно забыл сделать это до того, как стал работать в одном месте. Результаты пока выглядят лучше. Луч надежды ?! Спасибо за совет! – Toerndev

ответ

0

Спасибо @Talha Mir, который разместил решение в качестве комментария.

Я звонил только unregisterReceiver в onStopJob, а не другими путями. При добавлении этого исправлена ​​проблема.

По-видимому, широковещательная передача может закрываться после onReceive, если приемник не является незарегистрированным.

Смежные вопросы