Надеюсь, я смогу объяснить это хорошо...
Я пытаюсь лучше понять, как обрабатывать обратные вызовы HTTP в Android, поэтому я создал простое приложение, которое использует Volley для HTTP-запросов. У него есть только кнопка, которая инициирует HTTP-запрос к службе, которая, по сути, просто обновляет число в базе данных и отправляет его в ответе JSON через 5 секунд. Activity получает ответ и отображает ответ в TextView. Я тестирую его на реальном устройстве, на котором включена опция «Не сохранять действия» в «Настройки» — «Параметры разработчика».
Это сценарий, который я тестирую:
- Запустить приложение.
- Нажмите кнопку, которая запускает HTTP-запрос.
- Сразу после нажатия кнопки нажмите кнопку «Домой» устройства, чтобы перевести приложение в фоновый режим. Метод onDestroy вызывается из-за опции «Не сохранять действия».
- Подождите несколько секунд для ответа HTTP. Я вижу, что устройство получает его, потому что оно печатается в мониторе logcat, и база данных обновляется.
- Перед запуском обратного вызова я проверяю, что активность все еще жива. Поскольку активность была уничтожена, обратный вызов игнорируется. Если приложение восстанавливается из фонового режима, сбоя не происходит, но ответ сети пропускается. Кроме того, если я снова нажму на кнопку, он отправит новый HTTP-запрос и снова увеличит число...
Итак, вопросы:
Каковы наилучшие методы доставки сетевых ответов в пользовательский интерфейс? Я имею в виду, если вместо простой операции, скажем, это была форма регистрации, и я получаю телефонный звонок или что-то, что заставляет меня отправить приложение в фоновый режим, где может произойти что угодно, как я могу быть уверен, что не пропущу обратный вызов сети? ? Есть ли что-то, что может задержать выполнение обратного вызова, пока приложение снова не окажется на переднем плане?
Есть ли способ сохранить пакет, подобный тому, который находится в onSaveInstanceState, после вызова onDestroy и восстановить его, когда приложение снова окажется на переднем плане?
Допустим, информация, содержащаяся в ответе HTTP, является конфиденциальной. Есть ли рекомендуемый способ справиться с этим случаем? Я думал сохранить ответ во внутреннем хранилище и проверить его, когда приложение снова окажется на переднем плане, но я не знаю, возможно ли это сделать после вызова onDestroy, или это не очень хорошая идея с конфиденциальные данные.
Заранее спасибо!