Трансляция LocalBroadcastManager не используется

Intent, которые я транслировал с LocalBroadcastManager, похоже, не расходуются, а накапливаются. Каждый раз, когда я отправляю рассылку, я получаю и ее, и все ранее отправленные рассылки, в onReceive.

В периодическом JobService я создаю BroadcastReceiver с IntentFilter и динамически регистрирую его с lbm.registerReceiver(receiver, intentFilter);. Затем я запускаю Service, который создает Intent с тем же фильтром в своем конструкторе, выполняет lbm.sendBroadcast(intent); один раз, а затем останавливается. sendBroadcast возвращает true, что должно указывать на то, что оно было получено на другом конце (см. -were-received">Есть ли способ узнать, были ли получены трансляции LocalBroadcastManager?). Однако каждый раз, когда этот цикл повторяется, все ранее полученные Intents принимаются снова. Связав временную метку, я подтвердил, что на самом деле старые просто лежат без дела и получаются снова и снова.

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

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


comment
Обязательно отмените регистрацию BroadCastReceiver, когда JobService будет выполнен.   -  person Talha Mir    schedule 31.05.2016
comment
Я действительно забыл сделать это до того, как jobFinished в одном месте. Пока результаты выглядят лучше. Луч надежды?! Спасибо за совет!   -  person Toerndev    schedule 31.05.2016


Ответы (1)


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

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

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

person Toerndev    schedule 31.05.2016