Android: передача данных из Service в поворачивающуюся Activity?

Есть Service, который запрашивает и обрабатывает данные и передает результат в Activity.

Стандартным решением является отправка данных с помощью Broadcast.

Но Activity в любой момент может быть пересоздано, например, при повороте.

Соответственно BroadcastReceiver в Activity будет также отключен и данные не будут доставлены.


Есть ли какие-нибудь рекомендации, как поступать в этом случае, кроме как складывать данные в Application и чтобы Activity в onCreate забирало их или после пересоздания или прихода Broadcast.
  • Вопрос задан
  • 6157 просмотров
Пригласить эксперта
Ответы на вопрос 3
ara89
@ara89
Кэшируйте данные в бд, память или файл из сервиса.
Ответ написан
Комментировать
recompileme
@recompileme
Я в подобной ситуации предпочитаю не наступать в эту кучку дерьма

1 Регистрирую ресивер в онкреэйте
2 отключаю рекреэйт при повороте

Учтите — для 13 sdk (android:targetSdkVersion=13) и выше — добавился screenSize (android:configChanges=«keyboardHidden|orientation|screenSize»)

Но в моем случае задержка между запросом ответом — обычно меньше секунды и я не вижу юзер кейсов в которых бы апп падало. Возможно у Вас другой случай и мб лучше подойдет AIDL вместо Broadcast ов
Ответ написан
Комментировать
recompileme
@recompileme
Хотя если честно вообще не понял проблему.
Как раз вся соль бродкастов и состоит в том — что

активити пнуло интентсервис — сделай чето
сервис чето начал делать
юзер передумал, свернул активити — начал играть в игру или болтать по тел — ему уже нафиг не нужен результат
сервис закончил — пульнул ответ
но активити его не получило потому, что его уже нет
потому что юзеру уже насрать на ответ
и так и должно быть, потому что мы именно этого и хотели — чтобы

если активити умерло — ничего не падало с ошибкой.

А вы теперь хотите при следующем запуске активити — считать ответ на вопрос заданный неделю назад??
Звучит как бред какойто. Ну храните ответ в текстовом файле тогда, например, и при старте его считывайте.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы