1

Предположим, у меня есть Activity. В своем обратном вызове onCreate я создаю объект BroadcastReceiver, внедряя его как анонимный класс и помещая некоторый код в свой обратный вызов onReceive, который требует ActivityContext, чтобы показать сообщение Toast, когда он вызывается. В ActivityonResume callback Я зарегистрирую это BroadcastReceiver и в Я его отменил, поскольку он содержит код, который требует ActivityContext, и он может быть недоступен, если Activity проходит процедуру уничтожения, то есть изменение ориентации. Это означает, что если что-то, то есть IntentService, транслирует Intent для этого BroadcastReceiver, в то время как он незарегистрирован (как бы ни короток, но он все еще может произойти), Intent никогда не будет доставлен, и правильные действия, которые его обрабатывают, никогда не произойдут. Таким образом, пользователь может пропустить важную информацию (сообщение, информирующее о успешной регистрации, предупреждение о том, что что-то пошло не так) и я прав? Верно ли, что такой сценарий может произойти? Как предотвратить это? Как убедиться, что BroadcastReceiver получит трансляцию независимо от того, когда какая-то часть приложения срабатывает?Получение трансляции во время изменений жизненного цикла активности

+1

В этом случае не используйте 'BroadcastReceiver', вместо этого используйте шаблон« привязанного сервиса ». – pskink

+0

Я совершенно забыл про такую ​​вещь. Некоторое время не разрабатывали для Android :(Я подумаю о решении, использующем связанный сервис, но я по-прежнему буду признателен за получение более простого решения. – Salivan

ответ

1

Создайте MyBroadcastReceiver, продолжая BroadcastReceiver (разумеется: D) и зарегистрируйте это в манифесте с соответствующим действием фильтра намерений. Затем в onReceive() у вас будет доступ к Application's Context. Имейте в виду, что onReceive() будет запущен, даже если ваше приложение будет закрыто (если ваше действие - Intent.ACTION_SCREEN_OFF). Это зависит от того, что вы пытаетесь сделать в этом приемнике ... также обратите внимание на EventBus https://github.com/greenrobot/EventBus, если вам нужно отправлять события в свое приложение.

+0

В этом 'BroadReceiver'' onReceive' I просто хочу показать сообщение для пользователя, но это сообщение может отображаться в форме «TextView», но без «Контекста» «Activity», что «TextView» бессмысленно :). – Salivan

+0

Хорошо, кто отправляет сообщение? Если я получу это правильно, вы хотите нажать сообщения внутри очереди, когда они прибудут, и когда откроется «Активность», отобразите эти сообщения? Возможно, вы захотите сохранить эти сообщения ... Я не думаю, что понимаю, почему вы хотите показывать сообщения, когда активность не открыта. –

+0

Вы поняли меня неправильно. Я просто хочу, чтобы «Активность» знала, когда некоторая «Служба» завершает свою работу. Если «Активность» уничтожена, потому что пользователь этого пожелал, сообщение не должно отображаться, но я боюсь, что это может произойти при изменении ориентации, например. Таким образом, «Активность» может не получить сообщение, заставляющее пользователя ждать сообщения, которое уже было отправлено и больше никогда не будет. – Salivan

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