Несколько дней назад я прочитал, что есть лучший механизм для отправки широковещательных сообщений в рамках одного приложения — LocalBroadcastManager
.
Он работает хорошо (так же, как стандартные трансляции ..). Однако вчера я обнаружил, что он не может отправлять широковещательные сообщения получателям, которые определены в манифесте (когда я временно переключил его на использование стандартного метода Activity sendBroadcast
, он сработал).
Причина, по которой я хочу этого (и поправьте меня, если есть более предпочтительный способ сделать это):
Допустим, я хочу скачать файл. Я воспользуюсь услугой, потому что так хочет Android. Хорошо, теперь я хочу отображать (и периодически обновлять) свой прогресс в своей деятельности. Таким образом, служба будет отправлять трансляции в мою активность, и активность должна зарегистрироваться для их получения. Предпочтительный способ обработки широковещательных сообщений — зарегистрироваться в onResume()
и отменить регистрацию в onPause()
. Теперь давайте представим, что пользователю наскучил медленно движущийся индикатор прогресса, поэтому он нажимает «Домой» и уходит заниматься чем-то другим. Позже он возвращается и хочет видеть текущий статус загрузки, но как я могу сказать ему, когда я отписался от трансляций в ту секунду, когда он оставил мою заявку?
Вот почему я использую приемник, определенный в манифесте, чтобы быть всегда готовым к приему трансляции и постоянному ее хранению (общие настройки, база данных...), чтобы активность могла реконструировать последнюю трансляцию, когда она становится видимой.
Однако теперь я не уверен, то ли эта процедура не рекомендуется, то ли почему LocalBroadcastManager
не позволяет мне это делать.