SocketException при загрузке большого размера zip-файла

Я загружаю большой размер 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 разрушается, и вы получаете этот тайм-аут.

Мое предложение пытается реализовать ограничитель скорости полосы пропускания. Таким образом, вы можете проверить, будут ли медленные устройства лучше реагировать на эти длительные загрузки, хотя они будут медленнее.

  • Как я могу реализовать скорость загрузки, ограниченную Java?

  • Как ограничить пропускную способность в Java?

Ниже ссылки могут быть вам полезны

Android загружать большие файлы

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 } }); 
Intereting Posts
FindFragmentByTag () всегда возвращает null – Android Как я могу заставить Android TableLayout заполнить родительский режим в ландшафтном режиме? Воспроизведение FLV / HTTP в приложении Android Как изменить размер текста на панели инструментов? FLAG_ACTIVITY_NO_HISTORY не работает по назначению с Android 4.2 Извлечение файлов изображений из синтаксического анализа Android – запуск google-карты через веб-URL ToolBarAndroid не отображается в ReactNative Создание нерегулярной формы ImageButton с разными состояниями щелчка Android игнорирует параметр тайм-аута DefaultHttpClient Как запустить javascript в фоновом режиме? ParseUser, фиксирующий сохранение, в конечном итоге, локальную ошибку хранилища данных Android logcat затоплен «API Android W / Google Maps: устаревший GLHudOverlay; Draw (): no-op " Не удается завершить установку из-за конфликтной зависимости. Местоположение Android SDK не настроено в настройках Мое приложение исчезло из «планшета» в Google Play, но все еще доступно для телефона