Ответ 1
Если вы используете HttpConnection, увеличьте время ожидания
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setReadTimeout(10000);
ИЛИ
HttpConnectionParams.setSoTimeout(httpParameters, 10000);//
Я загружаю zip файл большого размера с сервера. Я следую за
06-11 21:45:18.789: I/System.out(8993): java.net.SocketException: recvfrom failed: ETIMEDOUT (Connection timed out)
Мое приложение не останавливается, но моя загрузка останавливается. Это происходит на мобильных устройствах hdpi android, которые говорят о низких процессорных устройствах. Загрузка работает отлично на S3 и планшетах. Я использую простой метод FileOutputStream для загрузки файла.
Если вы используете HttpConnection, увеличьте время ожидания
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setReadTimeout(10000);
ИЛИ
HttpConnectionParams.setSoTimeout(httpParameters, 10000);//
Думаю, вам нужно приобрести WakeLock, чтобы закончить загрузку, а затем отпустите его. Особенно, если вы загружаете большой файл через Wi-Fi-соединение, типично приобретать WifiLock, чтобы не пропускать радио.
С другой стороны, вы можете (если вы этого еще не сделали), а также попробовать DownloadManager. Поскольку эта официальная статья о wakelocks,
"Если ваше приложение выполняет длительные загрузки HTTP, рассмотрите возможность использования DownloadManager".
Я не уверен, что это может быть проблемой, но это возможно. Вы говорите, что это происходит на низкопроцессорных устройствах, может случиться так, что битрейт удаленных серверов вверх по потоку настолько велик, что клиентский нисходящий битрейт не может справиться с этим, и, как это происходит с большими файлами, через определенное время приемное устройство может 't обрабатывает битрейт, Socket
обрушивается, и вы получаете этот тайм-аут.
Мое предложение пытается реализовать ограничитель скорости полосы пропускания. Таким образом, вы можете проверить, будут ли медленные устройства лучше реагировать на эти длительные загрузки, хотя они будут медленнее.
Ниже вам могут быть полезны ссылки
Android - остановка больших файлов - использование async/progressdialog
попробуйте loopj lib скачать файл асинхронно http://loopj.com/android-async-http/ Я не уверен в том, что loopj lib загружает большой файл, но вы можете сделать это через пробную версию и ошибку.
Чтобы работать с сервером HTTP
, я настоятельно рекомендую вам Loopj, это надежная, простая и простая в использовании библиотека,
как говорится в документации, вы можете скачать файл просто так:
AsyncHttpClient client = new AsyncHttpClient();
String[] allowedContentTypes = new String[] { "image/png", "image/jpeg" };
client.get("http://example.com/file.png", new BinaryHttpResponseHandler(allowedContentTypes) {
@Override
public void onSuccess(byte[] fileData) {
// Do something with the file
}
});