Android: scarica file di grandi size

Sto provando a scaricare file di grandi size da Internet (> 20Mb)

private class DownloadTask extends AsyncTask<DatabaseInfo, Integer, String> { private DatabaseInfo info; protected String doInBackground(DatabaseInfo... dbInfo) { int count; info = dbInfo[0]; try { URL url = new URL(dbInfo[0].dbPath); InputStream input = new BufferedInputStream(url.openStream()); OutputStream output = new FileOutputStream("/sdcard/db.zip"); byte data[] = new byte[1024]; int total = 0; while ((count = input.read(data)) != -1) { //output.write(data, 0, count); total += count; if (total % 10240 == 0) { publishProgress(total); } } output.flush(); output.close(); input.close(); } catch (Exception e) { Log.e("err", e.getMessage()); } return null; } protected void onProgressUpdate(Integer... total) { int perc = (int) ((float) total[0] / (float) info.dbZipSize * 100); mProgressDialog.setProgress(perc); } protected void onPostExecute(String s) { dismissDialog(DIALOG_PROGRESS); Log.e("err", "finish!"); } } 

Se non commento la linea

  • Calcolo della distanza all'interno di un edificio
  • Imansible vedere l'tree di dipendenza con gradlew o gradle
  • XMPP (Openfire) spingere notifiche Android
  • recyclerview all'interno di horizontalscrollview
  • javax.net.ssl.SSLException: string di mano SSL abortita Reset di connessione da parte di peer durante la chiamata webservice Android
  • Dialogo con vista personalizzata, setCanceledOnTouchOutside non funziona
  •  //output.write(data, 0, count); 

    dopo che il dialogo di progressbar di scaricamento del 7-15% viene respinto e vedo "finire"! in Log. Perché?

  • Registra la class di domanda in Manifest?
  • "Migrazione del dominio necessario", exception in android durante il recupero di valori da db di realm
  • Come implementare il gesto di scorrimento in android
  • Problema di emulatore HelloAndroid
  • Posso disegnare con antialiasing su canvas?
  • Qual è il modo migliore per creare BroadcastReceiver?
  • One Solution collect form web for “Android: scarica file di grandi size”

    Dovresti esaminare l'implementazione di intervalli HTTP. Ciò consentirà di riavviare il download quando non riesce.

    Per quanto riguarda il motivo per cui si arresta, alcuni vettori implementano limiti di download che taglieranno una connessione dopo un certo tempo o quantità di download. Ho visto questa prima mano su un vector inglese e sono stato raccontato su altri. Di solito è facile verificare il limite tentando di scaricare il file tramite il browser Androids e se lo vedi bloccare o arrestare, è probabile che sia un problema di carrier (e sì, il download può essere terminato senza lanciare un'exception).

    Un'implementazione di Http Range vi permetterà di continuare il download da where è stato interrotto e quindi il tuo metodo doInBackground per utilizzare un algorithm di block e riprendere in modo che each volta che la connessione viene interrotta si attende una quantità di tempo e quindi tenta di riprendere where il download è stato interrotto (e, ovviamente, implementa un limite di tentativo in modo da non finire con un ciclo infinito quando il telefono cellulare non è in grado di scaricare il file).

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.