Есть некоторый BroadcastReceiver
, который регистрируется в методе onStart
активити и деактивируется (unregister) в методе onStop
.
Есть сервис, который посылает интент, который должен поймать данный BroadcastReceiver
и вывести данные из него в активити, полем класса которой он является.
Если сервис отошлет интент в момент поворота экрана, то есть в то время, когда ресивер деактивируется, но еще не зарегистрируется, то данные из сервиса до активити уже не дойдут (аналогичная ситуация произойдет, если в процессе загрузки информации пользователь банально свернет приложение).
Подскажите, пожалуйста, как правильно обработать эту ситуацию.
PS. Может быть, в этом случае подойдет как-либо другой способ коммуникации между сервисом и активити. Если быть более конкретным и упросить задачу, то она выглядит так:
В активити нажимаем кнопку, запускается сервис, который загружает текст из интернета и отдает этот текст обратно в активити, в которой он отображается. Главная цель - гарантированно доставить данные из сервиса до активити.
Задача довольно распространенная, уверен, что многие ее уже решали, но почему-то не могу найти хорошего решения.
Ну, вы можете ресивер не в активити подключать и содержать, а в фрагменте с setRetainInstance(true);
- это команда будет препятствовать пересозданию фрагмента при поворотах экрана. Это рекомендуемая гуглом практика для храняния данных в активити. Думаю и для вашей задачи это решение подойдёт
Вам, в общем, надо хранить где-то состояние (например да, в сервисе или фрагменте этом) и при воостановлении активити это состояние отображать. Вообще для этого всего есть архитекурное решение типа MVP MVC etc). Его можно самостоятельно реализовать или либы юзать. Mosby, Moxy, много их. Суть такова - актвити при восстановлении запрашивает сервис/презентер/синглтон а текущем состоянии (данные есть/нет/в процессе загрузки) и отображает состояние. При этом сущность для хранения состояния, конечно, не должна уничтожаться при повороте. Такой сущностью может быть помянутый выше фрагмент, синглтон, сервис, презентер. Серебряной пули нет. Модно сейчас MVP подход использовать. Лично я Mosby либу использую. В презентере состояние - в методах жизненного цикла активити запрашиваю у презентера его и отображаю.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как создать свой браузер с возможностью скачивания видео с любого сайта для android? Во многих браузерах это есть, но я хотел узнать, что прописано...
Как в android выводить в ListView только одну строку из базы данных? Может запрос какой есть по _id или еще что-то?
Пишу приложение на Java (сторонние библиотеки не предлагайте, пожалуйста), нужно нарисовать график вводимой с клавиатуры функцииПользовался...