Я работаю над приложением Android, которое требует использования HttpClient для загрузки файла с устройства Android на веб-сервер.Файл, который я загружаю, может достигать размеров до 1 Гб, поэтому могут возникнуть тайм-ауты, если устройство теряет соединение во время загрузки.Странно то, что тайм-аут, который я установил для сокета, похоже, не имеет никакого эффекта.Приложение будет зависать всякий раз, когда я теряю соединение, а не вызывать исключение SocketTimeoutException.
Я пытался использовать:
HttpConnectionParams.setConnectionTimeout(params, CrashLogParams.TIMEOUT);
HttpConnectionParams.setSoTimeout(params, CrashLogParams.TIMEOUT);
, но это работало только на время ожидания соединения, а не на время сокета.Также я попытался:
HttpParams p = httpclient.getParams();
p.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 10000);
p.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);
Причина, по которой я знаю, что тайм-аут соединения работает, заключается в том, что я получил бы исключение для тайм-аута соединения после выполнения
httpclient.execute(httppost);
Приложение, кажется, зависает, когда соединениетеряется во время загрузки, но после того, как приложение успешно установило соединение с сервером.
Чтобы протестировать свое приложение, я в разное время отключал сеть, чтобы посмотреть, как приложение отреагирует.Если я отключаю сеть перед отправкой запроса, я получаю ошибку соединения, и мое приложение может корректно это обработать, но если я отключу ее во время загрузки, приложение зависает.Конечно, я делаю все эти запросы через AsyncTasks, поэтому основной поток пользовательского интерфейса не падает.Мне просто интересно, есть ли какой-нибудь другой способ убедиться, что сокет истечет, если я не получу никаких данных, или я что-то здесь упускаю.Я читал много блогов и постов, но большинство из них просто предлагают использовать SO_TIMEOUT, который у меня не работает.
sotimeout не работает в многочастном посте http на android 2.1