Пример:
Мое приложение выполняет HTTP-соединение. Если я переключаюсь на главный экран с помощью кнопки «Домой» (быстрое переключение приложений), соединение, которое выполняло мое приложение, отменяется.
Почему?
Есть ли способ избежать этого?
Пример:
Мое приложение выполняет HTTP-соединение. Если я переключаюсь на главный экран с помощью кнопки «Домой» (быстрое переключение приложений), соединение, которое выполняло мое приложение, отменяется.
Почему?
Есть ли способ избежать этого?
К сожалению (или, в зависимости от того, как вы на это смотрите, к счастью, поскольку это экономит заряд батареи), когда приложение деактивируется из-за нажатия кнопки «Домой», большинство HTTP-соединений будут отменены, а большинство операций приостановлено. Этот код взят из этого сообщения в блоге проверит, был ли HttpWebRequest отменен деактивацией приложения (захоронением):
try
{
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(MyResultAsync);
}
catch (WebException e)
{
if (e.Status == WebExceptionStatus.RequestCanceled)
MessageBox.Show("Looks like your request was interrupted by tombstoning");
else
{
using (HttpWebResponse response = (HttpWebResponse)e.Response)
{
MessageBox.Show("I got an http error of: " + response.StatusCode.ToString());
}
}
}
Если вы хотите загрузить/выгрузить файл в фоновом режиме, вы можете взглянуть на этой статьи. Для любых более сложных типов сетевых операций вам не повезло.
Нет, этого никак не избежать. Когда вы используете Fast-App-Switch, все ваши веб-запросы будут отменены.
Если оно было отменено, вы сможете обнаружить это в исключении, которое вы получаете при возврате в приложение:
catch (WebException webEx)
{
if (webEx.Status == WebExceptionStatus.RequestCanceled)
{
// Retry request
}
else
{
// Handle other exception
}
}
Если в вашем приложении есть другие способы (вручную) отмены запросов, вам также необходимо учитывать их.