Apache HttpClient 4.0 не работает по таймауту для сокета на Android

Я работаю над приложением 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

6
задан Community 23 May 2017 в 12:26
поделиться