Android: передача данных из Service в поворачивающуюся Activity?
Есть Service, который запрашивает и обрабатывает данные и передает результат в Activity.
Стандартным решением является отправка данных с помощью Broadcast.
Но Activity в любой момент может быть пересоздано, например, при повороте.
Соответственно BroadcastReceiver в Activity будет также отключен и данные не будут доставлены.
Есть ли какие-нибудь рекомендации, как поступать в этом случае, кроме как складывать данные в Application и чтобы Activity в onCreate забирало их или после пересоздания или прихода Broadcast.
Я в подобной ситуации предпочитаю не наступать в эту кучку дерьма
1 Регистрирую ресивер в онкреэйте
2 отключаю рекреэйт при повороте
Учтите — для 13 sdk (android:targetSdkVersion=13) и выше — добавился screenSize (android:configChanges=«keyboardHidden|orientation|screenSize»)
Но в моем случае задержка между запросом ответом — обычно меньше секунды и я не вижу юзер кейсов в которых бы апп падало. Возможно у Вас другой случай и мб лучше подойдет AIDL вместо Broadcast ов
Хотя если честно вообще не понял проблему.
Как раз вся соль бродкастов и состоит в том — что
активити пнуло интентсервис — сделай чето
сервис чето начал делать
юзер передумал, свернул активити — начал играть в игру или болтать по тел — ему уже нафиг не нужен результат
сервис закончил — пульнул ответ
но активити его не получило потому, что его уже нет
потому что юзеру уже насрать на ответ
и так и должно быть, потому что мы именно этого и хотели — чтобы
если активити умерло — ничего не падало с ошибкой.
А вы теперь хотите при следующем запуске активити — считать ответ на вопрос заданный неделю назад??
Звучит как бред какойто. Ну храните ответ в текстовом файле тогда, например, и при старте его считывайте.
сценарий работы такой:
пользователь выполнил действие и в IntentService ушла команда, которая выполняется не мгновенно, а связана с передачей данных с сервера. пользователь не закрывает приложение, а продолжает что-то делать и в это момент поворачивает телефон. а сервис в этот злополучный момент пуляет ответ. соответственно, ответ не доходит. а юзер его ждет.
понял, у меня тот же сценарий. отключил рекреэйт как в комменте выше и проблема исчерпалась. хотя вот сейчас смотрю на это «вращающееся» чудо, и думаю что надо бы ориентацию прибить гвоздями к экрану и вынести в настройки предпочтение